假设我使用以下命令发送一封邮件:
mailx [email protected]
那么 mailx 是否首先尝试查找我的 ISP 的 SMTP 服务器来中继邮件,还是直接连接。这取决于我的 PC 是否有公共 IP 地址或是否位于 NAT 后面。如何检查 PC 上 mailx 的设置?如何使用 tcpdump 验证这一点?
答案1
传统上,Unixmail
和衍生产品(以及许多其他 Unix 工具)使用/usr/bin/sendmail
几乎所有邮件传输代理(MTA - postfix、exim、courier,当然还有 sendmail)提供的接口。
也就是说,该mail
程序不使用任何网络协议 - 它通过 stdin 提供消息sendmail
,并让其处理实际传送。(这可以追溯到一些邮件使用 SMTP、一些使用 UUCP、一些使用 BITNET 的时代……)
一旦邮件通过 排队sendmail
,MTA 就会处理实际的邮件传输,无论是通过 SMTP 还是其他方式。根据配置,它可以直接连接到目标 MTA,或通过另一台主机(也称为智能主机)中继邮件。
直接连接在服务器上更为常见;通过智能主机中继在家庭连接的个人计算机上更为常见 - 通过您的 Gmail 或 ISP/工作电子邮件帐户中继对于避免全面的“动态 IP”反垃圾邮件过滤器至关重要。
(某些 MTA,例如esmtp
或nullmailer
是专门为家庭用户构建的,总是使用中继主机。这些不支持接收邮件,并且占用的资源要少得多。
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
,但不是传统的bsd-mailx
。
应用程序 → [SMTP] → Gmail 或 ISP/工作服务器 → [SMTP] → 收件人 MTA → 收件人收件箱
第三种方法——直接连接到收件人的服务器——几乎绝不已使用,并且没有 MUA 支持它。在个人电脑上,使用它会导致您的邮件被拒绝(许多垃圾邮件都是从受感染的家庭用户 IP 地址发送的)。
应用程序 → [SMTP] → 收件人 MTA → 被垃圾邮件过滤器捕获
答案2
mailx 可以使用 SMTP。它的配置文件是 ~/.mailrc
一个例子是mailx 使用 Gmail 的 SMTP。
配置甚至可以在一个命令中完成:
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 中
答案3
从mailx(1)
手册页中,描述部分,字符串选项小节:
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.
答案4
有一种无需本地 mta 的替代方案,例如 sendmail/postix。
Debian 软件包邮件传输协议
来自 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.
韋斯
斯蒂芬· K.