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


30

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

mailx person@x.com

然后mailx首先尝试找出我的ISP的SMTP服务器来中继邮件还是直接连接。这取决于我的PC是否具有公用IP地址,或者它是否位于NAT之后。如何在PC上检查mailx的设置?如何使用tcpdump进行验证?

Answers:


29

传统上,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,例如esmtpnullmailer专门为家庭用户构建,并且始终使用中继主机。这些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→被垃圾邮件过滤器捕获

1
如何在Linux上找出我的MTA?
罗希特·邦加

1
@iamrohitbanga 1)检查已安装软件包的列表。(默认情况下,并非所有发行版都带有MTA。)
惊艳

1
@iamrohitbanga 2)我已经回答了。Outlook通常在家用个人计算机上使用,并且许多邮件服务器拒绝从家庭用户的地址接收的邮件(因为这些用户的垃圾邮件率很高)。这就是为什么需要通过公司服务器进行中继的原因。
grawity

1
@iamrohitbanga 3)“或”的意思是“其中之一”,而不是“两者”。那些使用Gmail作为主要邮件帐户的用户通过Gmail的服务器发送邮件。那些在其ISP处拥有邮箱的人使用其ISP的服务器。
grawity 2010年

1
@iamrohitbanga 4)那是因为mailx 不使用 “第三种方法”。它使用我的答案顶部所述的MTA。再一次,如果您不在公司的Internet连接上,则很可能直接丢弃从PC直接发送的邮件(不带中继)。
grawity 2010年

31

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中


请注意,这取决于传家宝邮箱,这不是默认邮箱。
Scott

@斯科特:是的。但是取决于Linux发行版。在某些系统上,默认值不是传家宝(例如Ubuntu:fclose.com/b/linux/1411/…。似乎有3个mailx版本)。在诸如Fedora,OpenSUSE之类的其他软件上,默认的是“功能丰富的”“传家宝邮件”。
ericzma 2012年

@ericzma我猜想传家宝-mailx是最好的/传家宝是唯一可以做到这一点的mailx(从命令行中的smtp服务器指定)?尽管默认情况下未安装,但它在Debian上运行良好。在Debian上,mailx链接到/ etc / alternatives / mailx,后者链接到/ usr / bin / bsd-mailx将heirloom-mailx安装到debian之后,/ etc / alternatives / mailx链接到/ usr / bin / heirloom-mailx,并且运行良好
barlop

@barlop您的发现与我的发现是一致的:heirloom-mailx有效,而bsd-mailx无效。尚不知道其他可行的实现。
ericzma 2014年

CentOS 6.7使用Heirloom
Mailx

3

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除非设置了此选项,否则它将使用。
伊格纳西奥·巴斯克斯

1

还有没有本地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


1
几乎... ssmtp是类似MTA的SMTP客户端。它的行为类似于/ usr / bin / sendmail,但不是直接连接到特定域的MX记录,而是将该任务委派给运行ssmtp的计算机可访问的SMTP服务器(通常通过用户名/密码)。这对于那些系统从高垃圾邮件的IP范围像ADSL动态IP范围,狡猾的托管服务提供商等发送电子邮件特别有用
安德烈·德米兰达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.