本博客迁移到现在的 VPS 上已是两年有余,在有评论到来时从来就没收到过提醒邮件,以前是放在租的主机上,所以那些都有人配置好了的。其实一直没把 WordPress 未能发送邮件的问题放心上,自己收不到倒无所谓,但评论者接收邮件提醒算是件重要的事。
今天一同事说我的博客无法进行评论,我一段时间以来只有一丝感觉为何这么久没人评论了,只想大家都不爱说话罢了,并未意思到博客本身的问题,也在此表示感谢。于是自己测试了下,登陆用户评论没问题,游客无法评论,最后查到是 wpDiscuz
与 Math 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 enabledphp > mail('fantaisa@sina.com', 'test subject', 'test content');
php > exit
php -a
进到 PHP 的交互界面,如果 PHP 的 mail()
函数没有任何错误表示邮件发送没问题,进邮箱能收到邮件当然就万事大吉了。
而我在用行上面的 PHP 的 mail()
函数却发生了如下的问题
root@/# php -a
Interactive mode enabledphp > 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 发行版,可能会用到 sendmail
或 postfix
来发送邮件,外部调用命令都是 mail
.
参考链接:
本文链接 https://yanbin.blog/wordpress-linux-cannot-send-out-email/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
[…] WordPress 在 Linux 下不能发送邮件的问题,后来有段时间很正常,我的网站接收邮件的邮箱是 Gmail […]
嗯,这个很好,我正要干这个事情呢。
这里还是有不少干货的,我现在就能收到你的评论通知了,不知道回复了你能否收到邮件通知,应该要订阅了才行。