摘要訊息 : 當伺服器無法正常發送電子郵件時的修復教學.
0. 前言
很多伺服器提供商的邮件发送连接埠 25 是预设被阻挡的, 这是因为有不少垃圾邮件是从这些伺服器发出的. 像我用过的 Vultr 和腾讯云. 我们首先都要发起一份服务单, 像伺服器提供商说明我们需要这个连接埠来发送邮件. 一般来说, 伺服器提供商都会为我们解除 SMTP 连结埠的阻挡.
我不再建议采用自行配置的方案发送邮件, 更倾向于使用某些伺服器提供商专门提供的邮件发送服务.
本文于 2022 年 3 月 17 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.
1. 配置
在伺服器提供商为我们解除连结埠阻挡之后, 我们需要对服务器进行一些配置.
首先安装依赖 : yum install -y sendmail sendmail-cf m4
. 因为 sendmail 安装完成之后是默认开机启动的, 所以不需要做开机启动配置, 需要对 postfix 做开机启动 : systemctl enable postfix
.
我们在 /etc/mail/local-host-name
中加入你的网域名称, 不需要加 www
. 之后设定配置文件 : vim /etc/mail/sendmail.mc
, 查找 DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
, 把 127.0.0.1
改为 0.0.0.0
. 设定完成之后进行转换 m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
.
然后进入 /etc/mail
, 制作 Hash 格式的资料库 : makemap hash access < access
. 修改 submit.cf 文件 vim /etc/mail/submit.cf
, 找到 Dj$w.Foo.COM
, 改为 Dj你的域名 (例如 Djjonny.vip
).
现在我们要对 PHP 进行配置. 打开 php.ini 档案, 查找 sendmail_path
, 改为 sendmail_path=/usr/sbin/sendmail -t -i -f'xxx@xxx.xxx'
(其中 xxx@xxx.xxx
替换为你想要的发件人邮箱, 可以是任意的, 但是不建议随便填写, 因为这一般都会违反伺服器提供商的规定). 这样可以防止出现 "由 xxx 代发" 的问题. 修改为 PHP 的配置档案, 需要重新启动 PHP-FPM.
最终我们启动服务 : systemctl start postfix sendmail
, 并且使用 mail -s "test" xxx@xxx.xxx
指令, 随便输入一些内容然后按 Control + D
发送. 如果发送成功会返回 EOT
.
登录邮箱我们便可以看到
2. 一些问题的解决方案
当遇到 unable to qualify my own domain name (xxx) -- using short name 这个问题的时候, 我们可以在 /etc/hosts
的最后增加一行 127.0.0.1 你的网域名称
.
如果遇到 fatal: parameter inet_interfaces: no local interface found for ::1 这样的问题, 我们编辑 /etc/postfix/main.cf
, 然后把 inet_interfaces = localhost
修改为 inet_interfaces = all
.
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :