WordPress 在 Linux 下不能发送邮件的问题

本博客迁移到现在的 VPS 上已是两年有余,在有评论到来时从来就没收到过提醒邮件,以前是放在租的主机上,所以那些都有人配置好了的。其实一直没把 WordPress 未能发送邮件的问题放心上,自己收不到倒无所谓,但评论者接收邮件提醒算是件重要的事。

今天一同事说我的博客无法进行评论,我一段时间以来只有一丝感觉为何这么久没人评论了,只想大家都不爱说话罢了,并未意思到博客本身的问题,也在此表示感谢。于是自己测试了下,登陆用户评论没问题,游客无法评论,最后查到是 wpDiscuzMath Comment Spam Protection 插件起冲突了,于是把后者禁用了就没问题。至于评论提交后响应有些慢是由于不得不用的 Akismet 插件的原因。

为评论的问题既然登陆到了 VPS 上了,也顺便把两年来的邮件发送问题也诊断一下,其实做来很简单,就是当初配置 VPS 时少做了一步。当前所用的 Linux 发行版是  Debian,之前记录过一篇 Debian Linux VPS 为 WordPress 的系统准备,其中提到 WordPress 发送邮件用的是 exim4,

所以第一步,修改 /etc/exim4/update-exim4.conf.conf, dc_eximconfig_configtype 的值由 'local' 改成 'internet'

dc_eximconfig_configtype='internet'

然后重启 exim4 服务,可用命令 service exim4 restart.

下一步是验证,既然是为 WordPress 服务的,那么就可以用 PHP 脚本来验证

root@/# php -a
Interactive mode enabled

php > mail('fantaisa@sina.com', 'test subject', 'test content');
php > exit

php -a 进到 PHP 的交互界面,如果 PHP 的 mail() 函数没有任何错误表示邮件发送没问题,进邮箱能收到邮件当然就万事大吉了。

而我在用行上面的 PHP 的 mail() 函数却发生了如下的问题

root@/# php -a
Interactive mode enabled

php > mail('fantasia@sina.com', 'test subject', 'test content');
2017-02-18 00:25:48 1ceySq-0006lK-8P Cannot open main log file "/var/log/exim4/mainlog": Permission denied: euid=104 egid=109
2017-02-18 00:25:48 1ceySq-0006lK-8P <= root@debian U=root P=local S=382
2017-02-18 00:25:48 1ceySq-0006lK-8P Cannot open main log file "/var/log/exim4/mainlog": Permission denied: euid=104 egid=109
exim: could not open panic log - aborting: see message(s) above
php > exit

居然是没有权限打开 /var/log/exim4/mainlog 文件,明明是用的 root 用户运行的 php -a 命令啊,再看一下 /var/log/exim4/ 目录不存在,因此手动创建该目录和文件

mkdir /var/log/exim4
touch /var/log/exim4/mainlog

再试前面的 mail() 函数,问题依旧,Google, 原来是调用 mail() 函数发送邮件的用户会是 Debian-exim, 所以需要修改 /var/log/exim4 目录及下文件的所有权,命令是

chown -R Debian-exim:adm /var/log/exim4
# chmod -R u+rw /var/log/exim4 这行是可选的

如果是其他的 Linux 发行版,可能会用到 sendmailpostfix 来发送邮件,外部调用命令都是 mail.

参考链接:

  1. Checking if PHP/WordPress can send mails
  2. Linux mail 命令

本文链接 https://yanbin.blog/wordpress-linux-cannot-send-out-email/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

3 Comments
Inline Feedbacks
View all comments
trackback

[…] WordPress 在 Linux 下不能发送邮件的问题,后来有段时间很正常,我的网站接收邮件的邮箱是 Gmail […]

Jack Zhou
7 years ago

嗯,这个很好,我正要干这个事情呢。

Yanbin
7 years ago
Reply to  Jack Zhou

这里还是有不少干货的,我现在就能收到你的评论通知了,不知道回复了你能否收到邮件通知,应该要订阅了才行。