mailx 是否使用 SMTP 中继发送邮件还是直接连接到目标 SMTP 服务器?

mailx 是否使用 SMTP 中继发送邮件还是直接连接到目标 SMTP 服务器?

假设我使用以下命令发送一封邮件:

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,例如esmtpnullmailer是专门为家庭用户构建的,总是使用中继主机。这些不支持接收邮件,并且占用的资源要少得多。

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.

相关内容