介绍
设置SMTP服务器不是一个微弱的任务。不仅安全是一个主要关注,但邮件可交付性是一个更大的问题。确保来自本地生成的SMTP服务器的电子邮件的高可交付性而不被标记为垃圾邮件是不可行的,因为当今大多数电子邮件提供商提供高度的垃圾邮件保护。 邮件转发解决了这两个问题。配置比完整的SMTP服务器要简单得多,因为您只需将服务器生成的任何电子邮件路由到专业管理的SMTP服务器。因此,您将免受大多数电子邮件递送麻烦。 有两种类型的邮件转发的: 开放式和 封闭式 。打开的邮件转发从外部源以及内部服务器邮件路由邮件。这种类型的中继是成熟的滥用垃圾邮件发送者。闭合中继仅转发在我们的服务器和内部网络上内部生成的消息。 虽然您可以使用任何外部SMTP服务器来路由电子邮件,但Mailgun提供了优于其他SMTP服务器的许多优势。这是免费的每月最多10,000封电子邮件,它的令人难以置信的可靠性,它允许您从单独的域发送邮件。通过使用与常规业务电子邮件域不同的域,您可以添加另一层保护,防止被意外列入黑名单。 本教程将引导您完成创建和设置免费Mailgun帐户和子域,设置所需的DigitalOcean DNS记录以及使用Postfix设置封闭邮件转发的过程。先决条件
在开始本指南之前,您需要具备以下条件:- 一个Ubuntu的16.04服务器通过以下设置了Ubuntu 16.04的初始服务器安装指南 ,包括Sudo非root用户和防火墙。
- 已注册的域名,如
example.com
,指着DigitalOcean的域名服务器。 您可以通过以下教程设置了如何设置与DigitalOcean主机名 。 - 一个常规的电子邮件帐户,您可以在其中接收要发送的测试邮件。
第1步 - 设置Mailgun帐户
创建一个新帐户 https://mailgun.com/signup 。 一旦注册完成后,登录并进入您的 仪表盘 ,然后点击页面顶部的菜单中 域链接。 您将看到一个沙盒域,Mailgun为您创建。 除了使用沙箱,通过点击 添加新域按钮创建Mailgun一个子域。 您可以命名此子域任何你喜欢的,如mailgun.example.com
或
bulkemail.example.com
。 本教程将使用
mg.example1.com
在它的例子。 创建子域后,您的
域名页面应该看起来像下面的图片:
接下来,通过单击其名称的链接,转到您的子域名的页面。您将看到三组DNS记录,如下图所示:
您需要在您的DigitalOcean信息中心中为您的域添加这些DNS记录。对于
发送和
跟踪的DNS记录是必需的,但你可以忽略药粥
接收 。您将使用此页面上的信息在下一步中创建正确的DNS记录,因此请保持此页面打开,以便您可以复制这些记录的值。
第2步 - 在DigitalOcean上设置DNS记录
登录到您的DigitalOcean帐户,然后点击你的仪表板中的 网络菜单。 然后输入你Mailgun在 域字段创建的子域名,并选择您希望配置的邮件转发的Droplet。 然后按 创建记录按钮。 新网域将显示在您的网域列表中。单击它以显示其编辑页面。除了已经创建的记录,您将需要添加两个 TXT记录和Mailgun specifed CNAME记录。 您可以选择添加的 MX记录为好,但并不需要他们的邮件转发。创建记录时请参考此示例屏幕截图: 使用您在第1步中获取的Mailgun提供的信息添加以下记录:- 创建一个新的CNAME记录:
- 输入
email
的名称和mailgun.org.
为主机名 。 在主机名的末尾的周期是必需的。
- 输入
- 创建TXT记录:
- 输入
@
作为名称 。 - 对于文本 ,输入从Mailgun第一TXT记录文本,在双引号。 在这个例子中,它的
"v=spf1 include:mailgun.org ~all"
,但你应该通过查看Mailgun提供的值验证这一点。
- 输入
- 创建另一个TXT记录:
- 输入由Mailgun的名称字段中提供第二TXT记录主机名的加粗部分。 在这个例子中,它是
mallo._domainkey
,但它可能是为您Mailgun域不同。 - 对于文本 ,通过复制提供Mailgun整个价值和它括在双引号。 它应该看起来像
"k=rsa; p=MIGfMA0G...AQAB"
- 输入由Mailgun的名称字段中提供第二TXT记录主机名的加粗部分。 在这个例子中,它是
@
,而不是由Mailgun提供的主机名 。 在您等待DNS更新时,查看并复制您的MailGun域页面的SMTP凭据。您很快就需要这些值。根据
域名信息部分,您的用户名旁边列出
默认的SMTP登录 ,密码毗邻
默认密码 。 如果需要,通过点击链接
管理SMTP凭证还可以更改这些值。 让我们设置Postfix接下来。
第3步 - 安装和配置Postfix
我们将使用内置的pacakge管理器来安装Postfix。 以非root用户身份连接到您的服务器:ssh sammy@your_server_ip
通常,Postfix安装过程使用一些交互式屏幕来提示您提供信息。为了防止此设置过程中发生任何可能的错误,让我们在开始安装过程之前预先配置此信息。 首先,配置Postfix作为邮件转发:
sudo debconf-set-selections <<< "postfix postfix/main_mailer_type select Satellite system"
然后告诉Postfix使用服务器的主机名作为邮件服务器的主机名:
sudo debconf-set-selections <<< "postfix postfix/mailname string $HOSTNAME"
然后配置Postfix使用Mailgun的SMTP服务器中继邮件:
sudo debconf-set-selections <<< "postfix postfix/relayhost string smtp.mailgun.org"
有了这些配置,安装Postfix:
sudo apt -y install postfix
为了使Postfix与Mailgun连接,您必须使用在第2步中获取的Mailgun子域的用户名和密码创建凭据文件。
注意:每个Mailgun子域都有自己的凭据。欲了解更多信息请参阅在哪里可以找到我的API密钥和SMTP凭证的Mailgun文档中获得。 创建和编辑新的凭据文件:
sudo nano /etc/postfix/sasl_passwd
将以下行添加到新文件:
/ etc / postfix / sasl_password
smtp.mailgun.org your_mailgun_smtp_user@your_subdomain_for_mailgun:your_mailgun_smtp_password
接下来,通过限制读写权限
根 ,并使用保护的文件
postmap
命令来更新Postfix的查找表来使用这个新的文件:
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
接下来,通过防止匿名登录并指定凭据文件来向Mailgun提供安全登录,从而增强邮件转发的安全性。编辑Postfix配置文件:
sudo nano /etc/postfix/main.cf
并将这些行添加到文件的末尾:
/etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = AUTH LOGIN
注:Postfix已制定各种安全措施,以防止垃圾邮件机器人所使用的邮件转发(见
http://www.postfix.org/SMTPD ACCESS的README.html了解更多信息)。 具体来说,这两条线在
main.cf
限制使用邮件转发到本地网络以及先前定义的SASL授权用户。
/etc/postfix/main.cf
smtpd_relay_restrictions = permit_mynetworks
permit_sasl_authenticated defer_unauth_destination
现在重新启动Postfix以加载新配置:
sudo systmctl restart postfix
您还应该确保没有打开传入的SMTP端口,运行此命令检查防火墙的状态:
sudo ufw status
输出应类似于:
OutputTo Action From
-- ------ ----
22 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
输出
不应包含任何
到列这些端口:
25
,
465
,或
587
。 这些端口用于SMTP访问,并且您不希望允许传入流量使用您的邮件转发。 如果不出现在输出中的那些端口,请查看
本教程学习如何删除规则或明确拒绝访问。 通常情况下,为了设置使用Postfix的SMTP服务器,服务器的主机名必须与您的网站
的完全限定域名 (
FQDN )。如果您的服务器的主机名是FQDN,您可以跳过到第5步.否则,继续阅读。
第4步 - 设置域映射
由于我们使用Mailgun作为SMTP服务器而不是Postfix,您的服务器的主机名不需要与您为电子邮件使用的FQDN相匹配。这是很常见的。例如,如果您的服务器是数据库服务器或监视服务器,则它可能根本没有FQDN。我们可以建立一个 映射表 ,替代一个电子邮件地址,另一个。 在这种情况下,我们将把您的Linux用户电子邮件帐户映射到您希望在MailGun域中的任何用户名。 创建和创建文件编辑一个新的映射表/etc/postfix/generic
:
sudo nano /etc/postfix/generic
该行添加到你的机器上Mailgun
sammy的用户映射文件。
/ etc / postfix / generic
sammy@your_hostname sender@your_subdomain_for_mailgun
您可以替换
sender
与你所希望的任何名称,如
wordpress
或
no-reply
。 真正重要的只有部分是
your_subdomain_for_mailgun
,这应该是你的Mailgun子在第1步中定义。 您可以通过创建更多的线条来指定多个用户。 现在,通过使用添加此映射Postfix的查找表
postmap
命令:
sudo postmap /etc/postfix/generic
然后编辑您的Postfix配置文件以添加映射文件:
sudo nano /etc/postfix/main.cf
将此行添加到文件的末尾:
/etc/postfix/main.cf
smtp_generic_maps = hash:/etc/postfix/generic
最后,重新启动Postfix以合并更改:
sudo systemctl restart postfix
让我们测试邮件转发,以确保一切配置正确。
第5步 - 测试邮件转发
要测试新的邮件转发,您需要从服务器向您的个人电子邮件地址发送一条消息。安装mailutils
因此您可以快速发送测试电子邮件。
sudo apt -y install mailutils
然后使用
mailutils
撰写和从服务器上的当前用户发送消息到您的个人电子邮件帐户。
mail -s "Test mail" your_email_address <<< "A test message using Mailgun"
您可以将消息更改为任何您喜欢的内容。 检查您的电子邮件客户端,看看是否收到了测试消息。如果你这样做,那么祝贺成功建立邮件转发。如果没有,请阅读以进行故障排除。
第6步 - 排除邮件转发故障
虽然有一些事情可能出错,例如在前面的任何步骤中犯错误,这里有一些常见的问题,你可能会遇到。 首先,确保Mailgun已验证您的DNS记录。没有什么可以发生,直到该步骤成功。仔细检查Mailgun的用户界面,确保域已验证。 接下来,仔细检查您的凭证文件(/etc/postfix/sasl_passwd
)。确保您的用户名和密码与Mailgun中相应子域的用户名和密码相匹配。不要使用Mailgun凭据,因为那些将不工作。使用Mailgun为您的子域提供的特定凭据。 检查您的电子邮件日志是否有任何有用的错误消您有两个地方想要查看。首先,检查日志服务器,您可以在文件中找到
/var/log/mail.log
。您可以使用查看最新条目
tail -f /var/log/mail.log
这将显示日志文件的最后几行,但也“跟随”输出,这意味着任何新的日志条目将在写入日志时显示。查看输出的错误消息,帮助您诊断任何问题。例如,Mailgun的错误密码将显示此错误:
Output> Nov 1 16:07:45 cart-1268 postfix/smtp[30082]: 0E8062038A: to=<yourmail@example.com>, relay=smtp.mailgun.org[173.203.37.114]:25, delay=2.3, delays=0.02/0/2.3/0, dsn=4.7.0, status=deferred (SASL authentication failed; server smtp.mailgun.org[173.203.37.114] said: 535 5.7.0 Mailgun is not loving your login or password)
除了您的服务器,Mailgun还记录事务。访问您的Mailgun仪表板,并选择
日志功能,可查看可能发生的被传递防止信息的错误消息。 最后,如果您的服务器的主机名不是FQDN,请确保您已完成第4步以为用户创建映射,以便他们可以发送消息。
结论
恭喜您使用Mailgun设置首个电子邮件转发。现在,您可以从您的服务器发送各种电子邮件,从内部沟通和安全的方式cron
从Web应用程序的任务的结果,客户通讯或消息。 如果您有其他服务器要用于发送邮件,则只需在每个服务器上再次执行第3步和第4步。您可以为任意数量的服务器重复使用相同的MailGun域。您还可以设置多个域,以便根据用途区分您的电子邮件。 一个常见的情况是使用两个域;一个用于内部服务器邮件,另一个用于批量邮件。内部邮件服务器是什么,可能从你的服务器的方案之一被送到如
cron
任务或WordPress的。 批量邮件是当您向整个邮件列表发送邮件时。 这种类型的电子邮件特别容易因为垃圾邮件而被列入黑名单,因此您可能希望使用可以在其被阻止的情况下丢弃的域,同时仍保留其他域。 无论如何,一定要在发送大量邮件时使用良好的电子邮件做法。 欲了解更多信息,请参见
Inboxing艺术 。 为了增加额外的电子邮件域,再次完成第1步和2,每个新的站点,然后编辑
/etc/postfix/sasl_passwd
和
/etc/postfix/generic
需要。基本的Postfix配置保持不变。 快乐电子邮件!