Sendmail 是一个很有年代感的 MTA(邮件传输代理)程序了,在现如今来说,可能会让大家觉得有点太老了,不过,这并不代表它就没有用处。本文将以 Debian 系统 VPS 为测试环境,根据博主自己的经验,教大家来配置该程序,好让原本苦于博客带有邮件通知功能却无法使用的博主,能顺利的启用该功能。当然,安装配置好以后,它不仅能支持 WordPress 的送信功能,拿来当作自己的专属邮箱也不在话下。

更新:邮件服务器其它方面的详细配置:《为服务器发出的邮件再加分——添加 MX、DNS 反向解析、SPF 和 DMARC 记录,并为邮件加上 DKIM 签名

 

本文书写的背景

相信很多使用 WordPress 博客的用户都和我一样,虽然知道 WordPress 有邮件通知的功能,却在实际使用中发现自己并没有收到任何的邮件(不信你百度或者谷歌一下看看······)。博主本人在一次偶然的场合,听到了有人说起这个,正好最近想写点教程之类的,所以稍微找了个环境测试了一下,在成功之后,将自己的一些经验分享给大家,让广大博主能早日使用上这一功能。

 

一、检查自己的服务器是否支持 mail 函数

因为是让 WordPress 支持邮件通知,所以我们自然要先知道服务器是否有禁用 mail 函数了,测试的方法有很多,这里只给大家提一下。

  1. 使用探针,在函数检测中输入“mail”看提示
  2. 在自己的 WordPress 登录页面点击忘记密码,尝试输入账户有关信息后,看 WordPress 是否能正常提示发出邮件

二、开启 25 端口

在正式开始安装及配置教程之前,我们先要把一些准备工作做到位,检查 25 端口是否有开启,不然可能会影响到我们的能不能正常的发邮件。此处的开启 25 端口,不仅仅是指在服务器的防火墙设置中开启 25 端口,还是指在一些主机服务商的限制中,开启 25 端口,因为有些主机商默认是不给服务器开启该端口的,以防止产生大量的垃圾邮件发送,所以如果你按照下面的教程做完后,发现自己还是没法发邮件,建议询问一下你的主机服务商,是否对 25 端口进行了限制。

注意:如果你只是在服务器或者博客上发邮件,你服务器上的对外 25 端口是没必要开启的,但是主机商有限制的话,还是得找主机商取消限制才行,只有当你想要让外网的程序或者人能使用你的服务器发信时,对外 25 端口才有必要开启。

PS:如果确实想开启对外 25 端口,可以参照这篇博文中的防火墙设置:《[CentOS/Debian]关于 Iptables&Ip6tables 防火墙的配置及保存应用

 

三、添加 MX 记录

MX 记录的作用,就是当有发邮件到你的域名邮箱时,让发件的服务器知道该把这封邮件送到哪里(哪个服务器)。MX 记录的添加需要到你的域名注册商那里,选择 DNS 配置来添加。格式根据注册商不同会略有区别,这里给大家简单的说一下怎么填写。

  1. 打开域名的 DNS 配置,选择添加 MX 记录
  2. 如果你的邮箱格式为@example.com 这种,主机名字留空,如果是@mail.example.com 这种,主机名字填写 mail
  3. TTL 可以理解为该条记录缓存的时间,以秒为单位,过了这个时间,服务器就会重新查询你的 MX 记录有没有更改,防止记录更改之后未及时更新而导致送信失败。这个值具体填多少看个人,一般默认就行了
  4. 距离/优先级设定的是当你存在多个 MX 记录(也就是多个服务器可以接收到你这个域名的邮件)时,别人发件的服务器具体应该先向谁尝试连接(优先把信送到哪个服务器),如果连接失败,则按照优先级设定的数字,从小到大依次尝试连接。该项填写的值,数字越小的优先度越高,比如一个 MX 记录是 0,一个是 10,那么送信的服务器会先选择连接 0 这条记录的服务器
  5. MX 记录地址。可以填写 IP,也可以填写域名。如果你的服务器只有 IPv4 地址,那么填写该 IP 进去就行了。如果你想 IPv4 和 IPv6 地址都能被连接,那么建议你先设置一个对于该邮件域名的 A 记录和 AAAA 记录,然后在该处写上域名,这样你的邮箱服务器就同时支持 IPv4 和 IPv6 连接了

注:如果你仅仅是想发送邮件出去而不接收邮件,MX 记录也可以不填写。

 

四、配置 SPF 记录

这个记录,是需要在你的域名注册商那边添加的,在 SPF 记录中,会写出你这个域名所包含的 IP,好让别人的邮箱服务验证是否是域名持有人发出的邮件。

由于服务器发出的邮件是可以任意伪造发件人的,比如你的网站是 yourdomain.com,如果我用我自己的服务器发邮件,我可以写发件人是 [email protected],以伪造是你的网站甚至是你本人的邮箱发出的邮件。为了对付这个问题,现在的邮箱服务基本上都会验证一个域名的 SPF 记录,按照发件人的 IP,来对比域名 SPF 记录中是否包含有这个 IP,来确定是否是真正的域名持有人发出的邮件。

关于这个记录的添加,是需要你的域名注册商支持才行的,不过大家不必担心,基本上现在的域名注册商都支持添加 TXT 记录,这个就可以用来填写 SPF 记录。

因为如果要介绍 SPF 服务具体的格式之类的,可能会花一些时间,本文决定对这个部分不进行详细介绍,具体的怎么书写可以自行网上搜索,下面只给一个例子,大家可以直接按照下面的例子添加 SPF 记录,一般没什么大问题。

我的域名是 youdomain.com,我想要用的邮箱为 [email protected] 这种格式的,则你可以这么添加 SPF 记录:

1.打开你的域名 DNS 设置

2.添加一条 TXT/SPF 记录,主机名称留空

3.在内容处粘贴上以下内容:

v=spf1 a mx ip4:XXX.XXX.XXX.XXX ip6:XXX.XXX.XXX.XXX -all

解读:v=spf1 这个是指的 SPF 的版本号,现在只有第一版,不要改动。后面的 a 和 mx,是指的域名的 IP 地址可以和域名的 A 记录和 MX 记录匹配(理解为你的邮件来自的 IP 可以和 A 记录和 MX 记录的 IP 相同),后面的两个 XXX.XXX.XXX.XXX,根据前面的设定,ip4 处填写你邮箱服务器的 IPv4 地址,ip6 处填写你的 IPv6 地址,如果没有 IPv6 地址,可以把这一部分删去。最后的 -all,指除了前面说的这些 IP,其它的都拒绝(不是来自于你本人服务器发送的),注意这个 -all 一定要写在最后。

 

五、配置 DNS 反向解析

前面的 SPF 记录,跟大家解释了它的作用是告诉别人,你的这个域名有哪些 IP,好让别人知道哪些 IP 发来的邮件是域名持有人服务器发来的,哪些可能是假冒的。而 DNS 反向解析则相反,它是告诉别人,一个服务器的 IP 绑定了哪些域名(可能解释不太对),配合上 SPF 记录,两个互相确认彼此,就能让你服务器发出的邮件显得更加的可靠,也更不容易被人冒名顶替。

这一部分,是需要在你的主机服务商处修改的,这里也不细说,因为不同的服务商,修改的方式可能不太一样,大家只要记住,把反向解析的域名和你 SPF 记录中的域名保持一致就行了。

例子:SPF 记录中的主机名为空,实际匹配的是 yourdomain.com 这个域名,那么 DNS 反向解析也填写该域名。

注:记得上面 SPF 记录里有 IPv6 地址吗?如果你在上面填写了 IPv6 地址,你的主机服务商也支持 IPv6,最好将 IPv4 和 IPv6 的 DNS 反向解析记录都写好,也就是都加上 yourdomain.com。

 

六、安装 Sendmail

SSH 连接上你的服务器,按照下面的指令顺序输入命令:

apt-get update
apt-get install sendmail

按照顺序输入之后,等待 Sendmail 安装完成。

在安装过程中,你可能会看到如下的提示:

To enable sendmail to use STARTTLS, you need to:
1) Add this line to /etc/mail/sendmail.mc and optionally
to /etc/mail/submit.mc:
include(/etc/mail/tls/starttls.m4')dnl
2) Run sendmailconfig
3) Restart sendmail</pre>
根据提示,要你在<span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">mail</span><span class="crayon-o">/</span><span class="crayon-v">sendmail</span><span class="crayon-e">.mc</span>和<span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">mail</span><span class="crayon-o">/</span><span class="crayon-v">submit</span><span class="crayon-e">.mc 这两个文件中,加入 </span>
<div id="crayon-5ab510abacc26720997207-13" class="crayon-line"><span class="crayon-e">include</span><span class="crayon-sy">(</span><span class="crayon-sy">/etc/mail/tls/starttls.m4')dnl 这一行。这个比较简单,简单的使用 vi 命令即可完成: