最近重装的系统,WordPress也进行了一次整体迁移,迁移后发现WordPress无法发送邮件了。emmm,挺严重的问题,这样我收不到我博客评论动态的推送了。
鼓捣了挺久,记录一下解决过程。
以下操作均在CentOS7 64Bit下操作。
WordPress 自身的 email 是使用 mail() 函数发送。如果发现无法发送,建议先创建一个测试用php文件。代码如下:
<?php $txt = "hello"; // 以下的邮箱地址改成你的 $mail = 'somebody@example.com'; // 发送邮件 mail($mail, "My subject", $txt); echo 'message was sent!'; ?>
(代码来自《为什么你的WordPress无法发送Email》)
这里邮箱需要注意的是,网易邮箱可能收不到(也不放垃圾箱,直接丢弃),建议用QQ邮箱。
首先确认安装以下软件:
yum -y install sendmail yum -y install mailx ps aux | grep sendmail mail -help
确认后,就可以试运行上面准备测试用mail.php:
php mail.php
我在测试时遇到了以下错误:
sh: /usr/bin/sendmail: No such file or directory
嗯。好吧,Path问题,这里有两种方法。
- 修改php.ini里的sendmail路径。
- 在/usr/bin/创建一个链接到sendmail。
这里我用第二种方法。一条命令解决。
ln -s /usr/sbin/sendmail /usr/bin/sendmail
在QQ邮箱查看,的确收到信了(在垃圾箱里)。(PS:这样的邮件网易邮箱会拒收)
但是还有问题。发件人和代发都很奇怪。在一番搜索后,发现需要更改主机名,但是按照网络上的的操作怎么都不成功,后来看到这篇文章《深入理解Linux修改hostname》 也就是说,修改主机名操作会牵扯到修改内核参数,这时我想起会不会是VPS虚拟化的问题,导致网上一般的修改主机名操作无效,相比能更换内核的KVM,OpenVZ算是虚拟化程度比较低的,不能自己更换内核,TUN/Tap也需要在VPS后台面板中开启。
那么也就是对于OpenVZ的VPS,可能只有在VPS后台面板更改Hostname才是有效操作。
更改后再次尝试发送邮件。如果遇到发件人是 root@localhost.localdomain 的情况,可以参见 《CentOS设置sendmail发件人,让sendmail不显示通过root@localhost.xxx代发》 一文进行配置。
最终效果如图: