很多 VPS 上面使用的 Linux 服务器精简了邮件发送组件,导致了服务器上发送不到通知邮件,一些需要邮件才能实现的功能(比如找回密码,确认注册等)就会受到影响。 WordPress 有很多 SMTP 插件可以帮助我们通过 STMP 发送邮件,简单的后台设置一下 SMTP 信息就可以了。
如果一个服务器上托管了很多 WordPress 站点,操作起来就非常繁琐了。今天为大家介绍一个可以直接在 Linux 上使用 SMTP 发送邮件的程序:Mailx,这个程序可以帮助我们让服务器直接支持邮件发送,不用再在每个站点上都设置了。
安装 Mailx 程序
今天,我们就拿 Centos 来举例说明,在 Centos 安装 Mailx 非常简单,直接使用 yum 安装即可。安装之前,建议移除不再需要且可能会引起冲突的 postfix 或 sendmail 程序。
yum -y remove postfix
yum -y remove sendmail
安装 Mailx 程序:
yum -y install mailx
配置 SMTP 发送邮件
一般邮件服务器会提供 smtp、smtps 和 smtp starttls 服务来发送邮件。smtp 最简单的,也最不安全的,不建议使用,最好使用 smtps 或者 smtp starttls 来发送邮件。我们就用 QQ 邮箱来举例说明怎么配置 Mailx 的。Mailx 的配置文件为 /etc/mail.rc,编辑这个文件,加入以下配置,两种方式任选一种即可。
[wprs_c-alert type=”info” content=”注意:QQ 邮箱的密码是在 QQ 邮箱账户设置里面生成的”授权码”,而不是 QQ 密码或者 QQ 邮箱独立登录密码。” /]
smtps 方式发送邮件配置
set nss-config-dir=/etc/pki/nssdb
set ssl-verify=ignore
set smtp=smtps://smtp.qq.com:465
set smtp-auth=login
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx
set from=xxx@qq.com
starttls 方式发送邮件配置
set smtp-use-starttls
set nss-config-dir=/etc/pki/nssdb
set ssl-verify=ignore
set smtp=smtp.qq.com:587
set smtp-auth=login
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx
set from=xxx@qq.com
加入上面配置保存以后,运行以下命令测试发送邮件,如果没有意外,我们的邮箱很快就能收到从服务器发过来的测试邮件了。
echo "Hello" | mail -v -s "test" xxx@qq.com
使用上面的配置,邮件是完全能够发出去的,但是发送邮件的时候会提示 “Error in certificate: Peer’s certificate issuer is not recognized.”提示,运行以下命令生成一个证书即可。
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
生成完成之后,修改 mail.rc 邮件配置,修改 nss-config-dir 为上面命令生成的 /root/.certs,保存即可。
参考上面的设置,同样可以使用 126,163 等邮箱在服务器上通过 SMTP 发送邮件。设置成功以后,服务器上的所有 WordPress 站点,或者其他程序、其他语言开发的站点,都可以直接发送邮件了,是不是很方便?
关于 "使用 Mailx 通过 SMTP 在 Centos 上发送邮件,解决 WordPress 发送邮件问题 "的一个想法
确实方便多了,不用再装插件了。
执行这些命令后还是出现相同的错误:“Error in certificate: Peer’s certificate issuer is not recognized.”
请问是怎么回事??
按照上面说的,执行了命令:
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > ~/.certs/qq.crt
certutil -A -n “GeoTrust SSL CA” -t “C,,” -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n “GeoTrust Global CA” -t “C,,” -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
邮件是能发了,但还是出错,相同的错误提示:“Error in certificate: Peer’s certificate issuer is not recognized.”
把邮件的发件人设置为和 SMTP 邮箱一样试试。
生成证书那儿少了一条,加上就可以了。
执行完四条命令之后 cd 到 /root/.certs/ 目录
然后执行
certutil -A -n “GeoTrust SSL CA – G3” -t “Pu,Pu,Pu” -d ./ -i qq.crt
被你坑了1个小时,因为你的语句中,G3前面的中划线是中文字符
这个锅不是 @枫叶 的,发的评论是对的,不知道为什么,被 WordPress 自动转码了。为了避免其他人被坑,我编辑了一下这条评论,加上了 pre。
wordpress中不用设置吗?centos中通过命令都可以正常发送,但wordpress中就是不行。启用插件就可以了。
可以看一下 mailx 日志,看是否有报错。