假设我使用以下命令发送邮件:
mailx person@x.com
然后mailx首先尝试找出我的ISP的SMTP服务器来中继邮件还是直接连接。这取决于我的PC是否具有公用IP地址,或者它是否位于NAT之后。如何在PC上检查mailx的设置?如何使用tcpdump进行验证?
假设我使用以下命令发送邮件:
mailx person@x.com
然后mailx首先尝试找出我的ISP的SMTP服务器来中继邮件还是直接连接。这取决于我的PC是否具有公用IP地址,或者它是否位于NAT之后。如何在PC上检查mailx的设置?如何使用tcpdump进行验证?
Answers:
传统上,Unix mail
及其派生工具(以及许多其他Unix工具)使用/usr/bin/sendmail
几乎由所有邮件传输代理(MTA –后缀,exim,courier,当然还有sendmail)提供的接口。
也就是说,该mail
程序不讲任何网络协议,而是sendmail
通过stdin 将消息提供给它,并让它处理实际的传递。(这可以追溯到某些邮件使用SMTP,某些使用UUCP,某些使用BITNET的时代。)
一旦邮件通过队列sendmail
,MTA就会处理实际的邮件传输,无论是通过SMTP还是其他方式。根据配置的不同,它可以直接连接到目标MTA,也可以通过另一个主机(也称为智能主机)中继邮件。
直接连接在服务器上更为常见。通过smarthost进行中继在家庭连接的个人计算机上更为常见-通过Gmail或ISP /工作电子邮件帐户进行中继对于避免使用全面的“动态IP”反垃圾邮件过滤器至关重要。
(某些MTA,例如esmtp
或nullmailer
专门为家庭用户构建,并且始终使用中继主机。这些MTA不支持接收邮件,并且在资源上要轻得多。)
mailx→[/ usr / bin / sendmail]→本地MTA队列→[SMTP]→收件人MTA→收件人收件箱
mailx→[/ usr / bin / sendmail]→本地MTA队列→[SMTP]→Gmail或ISP /工作服务器→[SMTP]→收件人MTA→收件人收件箱
其他程序(通常是用户友好的图形客户端,例如Thunderbird或Outlook)始终直接连接到中继/智能主机SMTP服务器(同样,通常是Gmail或ISP /工作SMTP服务器),该服务器代表您传输邮件。
本机SMTP支持存在于heirloom-mailx
传统SMTP中,但不存在bsd-mailx
。
应用程序→[SMTP]→Gmail或ISP /工作服务器→[SMTP]→收件人MTA→收件人收件箱
第三种方法-直接连接到收件人的服务器-几乎从未使用过,而且MUA都不支持它。在个人计算机上,使用它会导致您的邮件被拒绝(从受感染的家庭用户IP地址发送大量垃圾邮件)。
应用→[SMTP]→收件人MTA→被垃圾邮件过滤器捕获
mailx
不使用 “第三种方法”。它使用我的答案顶部所述的MTA。再一次,如果您不在公司的Internet连接上,则很可能直接丢弃从PC直接发送的邮件(不带中继)。
mailx可以使用SMTP。它的配置文件是〜/ .mailrc
一个示例是使用Gmail的SMTP的mailx。
配置甚至可以在一个命令中:
mailx -v -s "$EMAIL_SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://smtp.gmail.com:587 \
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
-S smtp-auth-user=$FROM_EMAIL_ADDRESS \
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ \
$TO_EMAIL_ADDRESS
如果使用普通的SMTP服务器,则要容易得多(请参阅此处的详细介绍):
mailx -v -s "$EMAIL_SUBJECT" \
-S smtp=smtp://smtp.example.com
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
$TO_EMAIL_ADDRESS
您也可以将它们放入mailx的配置文件〜/ .mailrc中
在mailx(1)
手册页的DESCRIPTION节中,String Options子节:
smtp Normally, mailx invokes sendmail(8) directly to transfer
messages. If the smtp variable is set, a SMTP connection
to the server specified by the value of this variable is
used instead.
sendmail
除非设置了此选项,否则它将使用。
还有没有本地mta的替代方法,例如sendmail / postix。
Debian软件包ssmtp
rpm描述中的信息:
Summary : Extremely simple MTA to get mail off the system to a Mailhub
URL : http://packages.debian.org/stable/mail/ssmtp
License : GPLv2+
Description : A secure, effective and simple way of getting mail off a system to your mail
: hub. It contains no suid-binaries or other dangerous things - no mail spool
: to poke around in, and no daemons running in the background. Mail is simply
: forwarded to the configured mailhost. Extremely easy configuration.
hth
斯蒂芬·K