配置 WordPress 使用阿里云邮件推送服务发送邮件

易水博客搬到阿里云服务器之后,易水发现收不到博客发出的邮件了。在网上搜了一下,wordpress缺省是使用 PHP 的 mail() 功能发送邮件,如果主机没有开启这一功能,那么 wordpress 当然就无法发出邮件了。但即便是服务器支持 PHP mail 功能,也不推荐使用这种方式发送邮件,原因是各大邮件服务商通常会使用很多手段检测邮件来源是否合法,以此减少垃圾邮件(Spam Mail)的侵袭。而以这种方式发送的邮件很可能被当做伪造邮件被丢弃,甚至都不会出现在收件人的垃圾箱里!

为解决这个问题,易水首先想到的办法是自己搭建一个邮件服务器。按照这篇文章安装并配置好 Postfix 之后,发现邮件发送始终失败,总是提示发送超时:

Jan  3 16:08:41 localhost postfix/smtp[16253]: connect to mx3.qq.com[183.57.48.35]:25: Connection timed out
Jan  3 16:09:11 localhost postfix/smtp[16253]: connect to mx2.qq.com[14.17.41.170]:25: Connection timed out
Jan  3 16:09:11 localhost postfix/smtp[16253]: connect to mx2.qq.com[240e:ff:f040:28::f]:25: Cannot assign requested address

搜索后发现,原因是阿里云关闭了SMTP服务所用的端口25。刚开始误以为阿里云关闭的是入方向对25端口的访问,因此尝试把 Postfix 的监听端口改为 SMTPS 所用的 465 端口,并在管理控制台的实例安全组中增加了对此端口的访问,但测试后发现还是发送超时。易水怀疑阿里云是关闭了出方向对25端口的访问,通过查看阿里云TCP 25 端口控制台解封申请,确认阿里云的确是关闭了出方向对 SMTP 25 端口的访问,虽然可以申请解封,但按这篇文章所说,解封后也必须要由第三方 SMTP 服务器发送邮件,而不能使用自己的 VPS 直接发送邮件。这样一来,就彻底堵死了自建邮件服务器发送邮件之路。

而使用第三方 SMTP 服务器发送邮件,最简单的方式是用申请的免费邮箱,比如qq邮箱、126邮箱等,但这样一来邮件的发件地址就变成了免费邮箱地址,而不是easwy.com,会显得很不专业。因此易水决定使用邮件推送服务来发邮件,提供这类服务的很多,国外有 MailGun、SendGrid等,国内也有很多,查了一下,阿里云也提供了免费的邮件推送服务,开通此服务后每天可以免费发送200封邮件,对于易水博客这样的小站来说,这已经足够用了,因此易水开始着手配置阿里云的邮件推送服务,下面记录了具体配置的步骤。

添加域名

首先需要登录阿里云邮件推送控制台开通邮件推送服务,易水已在阿里云上购买了ECS云服务器,所以可以直接免费开通,如果你还没有购买阿里云的服务,可以领取易水的阿里云幸运券获取优惠。

开通服务后,首先需要先添加发信域名,在左侧的菜单栏选择 邮件设置 --> 发信域名,然后点击右上角的 新建域名,添加你的域名即可,添加前需要认真阅读页面上的提示,以免出错。具体操作步骤见下图:

新建域名

添加 DNS 配置

在邮件推送控制台添加发信域名后,需要到你的域名解析服务商网站上更新 DNS 配置。这一步的主要目的有两个,一是验证此域名确实由你所有,二是提供合法性验证,在阿里云或其他邮件服务器收发邮件时,会使用这些信息进行验证。

在阿里云的 域名配置 页面已经详细列出了各配置项及内容,按上面列出的项目设置两个 TXT 记录、一个 MX 记录和一个 CNAME 记录即可。易水博客的域名解析服务是由 Godaddy 提供的,因此需要到 Godaddy 的网站进行如下设置:

域名配置

设置好域名后,稍等一会儿让新配置生效,然后回到阿里云的邮件推送控制台,点 验证 按钮对刚刚添加的域名进行验证。如果 DNS 配置没有问题则会看到 验证通过 的提示。

添加发信地址

在 DNS 配置验证通过后,就可以在邮件推送控制台上填加发信地址了。点击左边导航菜单中的 发信地址 菜单,然后 新建发信地址。易水添加了 easwy@easwy.com 做为发信地址,并设置了 SMTP 密码,此地址和密码在下一步会用到。

安装并配置 WP SMTP Plugin

现在就可以对博客进行配置,使用阿里云邮件推送服务发送邮件了。在 WordPress 里有很多插件可以实现这一功能,易水博客使用的是 WP Mail SMTP插件。

首先下载并安装此插件,然后进行了如下设置:

WP SMTP Plugin设置

  • From Email: easwy@easwy.com
  • From Name: 易水博客
  • Mailer: Other SMTP
  • Return Path: 选中
  • SMTP Host: smtpdm.aliyun.com
  • SMTP Port: 465
  • Encryption: SSL
  • Auto TLS: ON
  • Authentication: ON
  • SMTP Username: easwy@easwy.com
  • SMTP Password: 设置方式见下

可以在此处获取阿里云 SMTP 服务器的的配置信息。上面的设置中需要注意的是 SMTP Username这一项的设置,原本易水以为应该设置为发信地址中的前缀。比如易水的发信地址设置为 easwy@easwy.com,就想当然的把SMTP用户名设置为 easwy,但设置后总是认证失败,后来才发现需要把这一项设置为完整的发信地址,即 easwy@easwy.com

对于最后一项 SMTP Password,WP Mail SMTP插件不建议在配置窗口中设置,因为这样设会在数据库中保存密码的明文,存在安全隐患。因此,易水按照插件的提示,打开 WordPress 安装目录中的 wp-config.php 配置文件,在该文件中加上下面几句话:

/** Setting for WP Mail SMTP in wp-config.php */
define('WPMS_ON', true);
define('WPMS_SMTP_PASS', 'password-for-easwy.com');

发送测试邮件

完成上述设置后,就可以到 Email Test 标签页试着发一封邮件,看能否发送成功。如果发送失败,需要根据提示排查失败原因。

配置完成

恭喜你,你现在已经可以使用阿里云的邮件推送服务发送邮件了!如果你在配置中遇到了问题,欢迎留言。

本文以创作共用版权协议发布,转载本文要求遵循“署名-非商业性使用-相同方式共享3.0”的创作共用协议,并以链接形式指明本文地址。

本文链接地址: https://blog.easwy.com/archives/wordpress-send-mail-via-aliyun-mail-service/

文章的脚注信息由WordPress的wp-posturl插件自动生成

“配置 WordPress 使用阿里云邮件推送服务发送邮件”的2个回复

  1. 你是如何收信的?
    注意到你配置了MX设置,那么所有incoming mail都去了阿里邮件推送服务器,你怎么收信?

  2. 谢谢博主的分享。
    网络世界的这一端的我,能够感受到博主精神的力量和对技术的热爱,以及做为一个父亲对女儿的爱。
    感谢博主的存在!
    向博主学习~

发表评论

电子邮件地址不会被公开。 必填项已用*标注