设置 Postfix 登录您的电子邮件帐户并发送邮件

作者: Mitch Frazier

除非您是系统管理员,否则通常不必太担心电子邮件的发送问题,您只需将 GUI 电子邮件客户端连接到您的外部电子邮件帐户即可。但是,如果您的系统尝试发送邮件,例如来自cron怎么办?通常,这些邮件会发送到 root 用户或系统上的某个指定用户,但是如果您希望将它们发送到您的外部电子邮件帐户怎么办?

显而易见的答案是,您设置系统将 root 用户的电子邮件转发到您的外部电子邮件帐户,例如,更改以下行/etc/aliases:

root:   you

root:   you@example.com

或者您可以更改 root 用户的.forward文件以完成相同的操作。

那么,问题是什么?问题在于,您的 IP 地址(或您的 ISP 的 IP 地址)有一天会被列入黑名单,然后您突然收不到任何系统邮件了。如果您有将邮件发送给某人的脚本,也可能出现此问题:在某个时候,他们的电子邮件服务器可能会拒绝与您的系统对话,因为它认为您是垃圾邮件发送者或类似的东西。

在这种情况下,假设您的电子邮件提供商允许您进行 SMTP 访问,一种解决方案是让您的系统将电子邮件发送给您的电子邮件提供商,并让您的电子邮件提供商将其发送到最终目的地。您的电子邮件提供商可能(希望如此)更有可能掌握与其 IP 地址和黑名单相关的问题,因此您的电子邮件更有可能被发送(对于 cron 来说,它已经到达目的地)。

让您的系统将邮件发送到外部电子邮件帐户,即让您的系统通过另一台服务器中继邮件,需要进行一些配置。很少有电子邮件提供商允许他们的服务器用作开放中继,开放中继是任何人都可以使用的电子邮件中继。因此,您首先要做的事情之一是告诉您的系统如何登录到您的电子邮件帐户,以便它可以中继电子邮件。此外,您可能还必须,或者想要,配置您的系统在使用 TLS/SSL 登录时,以便保护您的用户名和密码。

在这个例子中,我将向您展示我如何设置我的系统将邮件发送到我的 fastmail 帐户。我使用 openSUSE,因此我的系统使用 postfix 来发送电子邮件。如果您使用其他 Linux 发行版,这些步骤可能需要修改,如果您使用 exim 或其他系统进行电子邮件发送,这将毫无帮助。

首先,如果尚未安装并运行,请安装 SASL 身份验证守护程序saslauthd并启动它。接下来,编辑文件/etc/postfix/sasl_passwd并将此行添加到文件底部

mail.messagingengine.com   USERNAME:PASSWORD

此文件中的值确定 SASL 在登录到特定服务器时使用的用户名和密码。显然,为您的外部电子邮件帐户更改这些值。您应该能够在电子邮件提供商的网站上找到服务器名称,尽管通常需要挖掘一些信息。

现在运行postmap将文本密码文件转换为 .db 文件

postmap sasl_passwd

接下来,编辑文件/etc/postfix/master.cf并取消注释tlsmgr

tlsmgr  unix  -   -   n   1000?  1  tlsmgr

现在编辑文件/etc/postfix/main.cf并将以下行添加到文件底部

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = PLAIN, LOGIN

smtp_tls_security_level = verify
smtp_tls_mandatory_ciphers = high
smtp_tls_verify_cert_match = nexthop
smtp_sasl_tls_security_options = noanonymous

relayhost = [mail.messagingengine.com]:587

#debug_peer_list = mail.messagingengine.com

这些选项告诉 postfix 在执行 SMTP(即发送邮件)时使用 SASL 身份验证,并且它们还告诉它在登录时使用 TLS 安全性。Therelayhost选项告诉 postfix 中继电子邮件时使用的默认服务器,:XXX 值是要使用的端口号(您必须从电子邮件提供商的帮助页面中找到的另一个值)。最后一个选项,注释掉的那个,debug_peer_list允许您告诉 postfix 基于每个服务器显示与 TLS 相关的调试信息。这在尝试诊断 TLS 连接问题时通常很有用。在这种情况下,它证明是有用的,因为 postfix 无法识别颁发 Fastmail SSL 证书的 CA(证书颁发机构)(Entrust)。(实际上,我不知道 postfix 是否默认识别任何 CA。)

在 Entrust 站点上摸索了一段时间后,我的 SSL 记忆又回来了,我搜索了“根证书”,然后进入了一个页面,在那里我可以下载 Entrust 的根证书 的副本(您可能需要 从这里开始)。

下载证书后,在/etc/postfix中保存一个副本,并删除组/其他用户的读/写访问权限。然后将以下行添加到/etc/postfix/main.cf:

smtp_tls_CAfile = /etc/postfix/entrust_ssl_ca.cer

重新启动 postfix

$ /etc/init.d/postfix restart

现在从命令行发送测试电子邮件

$ mail -s test you@example.com <<<test

希望它能到达您的外部电子邮件帐户。

Mitch Frazier 是 Emerson Electric Co. 的一名嵌入式系统程序员。自 2000 年代初以来,Mitch 一直是Linux Journal 的撰稿人和朋友。

加载 Disqus 评论