博主在腾讯云和 Vultr 都有服务器, 但是没有一台服务器发送邮件是正常的
对于一个站长来说, 发送邮件多重要我就不说了. 注册确认邮件、修改密码确认邮件以及找回密码邮件等等, 这些都需要发送邮件, 这里还不包括发送通知等
我的服务器安装 WordPress 和 Discuz! 之后一直不能发送各种通知邮件, 这个问题困扰了我一个星期都没有解决, 差点上淘宝了
各种百度谷歌之后, 加上发起工单让服务商协助, 终于解决了这个问题, 刚刚邮箱被自己轰炸了...

我这个人很少发起工单求助, 都是服务器出现问题之后才发起工单, 一般有问题都是自己搜索解决的, 这次是实在解决不了了, 才发起工单, 发现原来服务商给所有的账号默认加上了 SMTP block
提醒 : 本文建立在你的服务器提供商为 Vultr, 并且 PHP 按照本博客给出的方式安装配置
首先是账号的配置问题 :
Vultr 的服务器默认的 SMTP 被阻挡的, 也就是说你账号下所有的服务器是不能够发送邮件的

首先你需要发起工单, 内容可以这么写------
I built a Web using WordPress in my server xxx.xxx.xxx.xxx(写你服务器的 IP), but I cannot receive any register e-mail sent from my server. Can you help me?
Thank you very much!
如果之后有回复, 但是不是帮你去掉服务器 SMTP block 的, 你根据他的回复回答他一些问题, 然后在最后写上------
Can you help me remove SMTP block from my account?
Thank!
加上这句话之后, 基本就没什么问题了
之后你就会收到像上面这张图片一样类似的回复, 说是已经帮你移除了 SMTP block 这个限制
提醒 : 你需要注意使用规则, 如果发现你滥用的, Vultr 是有权利重新加上限制的
去除限制之后, 我们需要对服务器进行一些配置
首先安装依赖
yum install -y sendmail sendmail-cf m4
因为 sendmail 安装完成之后是默认开机启动的, 所以不需要做开机启动配置, 需要对 postfix 做开机启动
systemctl enable postfix
安装完成之后, 我们需要进行配置
先加入主机名称
vim /etc/mail/local-host-name
在里面加入你的域名, 不需要加 www.
之后设定配置文件
vim /etc/mail/sendmail.mc
查找 DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
改为
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
设定完成之后进行转换
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
制作 Hash 格式的资料库
cd /etc/mail
makemap hash access < access
修改 submit.cf 文件
vim /etc/mail/submit.cf
找到 Dj$w.Foo.COM
改为
Djxxx.xxx (其中 xxx.xxx 替换为你的域名)
修改 PHP 配置文件
vim /etc/php.ini
查找 sendmail_path
改为
sendmail_path=/usr/sbin/sendmail -t -i -f'xxx@xxx.xxx' (其中 xxx@xxx.xxx 替换为你想要的发件人邮箱)
这样可以防止出现 "由 xxx 代发"
的问题
完成之后启动服务
systemctl start postfix sendmail
之后测试邮件的发送
mail -s "test" xxx@xxx.xxx
随便输入一些内容然后按 Control + D
发送
如果发送成功会返回 EOT

登录邮箱查收

再次尝试注册 WordPress 或者 Discuz!, 发现已经可以收到注册邮件了
补充 : 当遇到启动错误的时候, 首先查看日志 下面给出两个错误的解决方案 错误 1 : unable to qualify my own domain name (xxx) -- using short name 解决方案 : 在 hosts 文件中, 写入 127.0.0.1 xxx 你的域名 错误 2 : fatal: parameter inet_interfaces: no local interface found for ::1 解决方案 : 修改 /etc/postfix/main.cf 中的 "inet_interfaces = localhost" 项为 "inet_interfaces = all"
自創文章, 原著 : Jonny, 如若需要轉發, 在已經授權的情況下請註明出處 :《CentOS 下网站发送邮件的问题》https://jonny.vip/2017/07/31/centos-%e4%b8%8b%e7%bd%91%e7%ab%99%e5%8f%91%e9%80%81%e9%82%ae%e4%bb%b6%e7%9a%84%e9%97%ae%e9%a2%98/
Leave a Reply