centos 7 邮件发送

背景:最近服务器老是磁盘报警,网上搜了一下centos7发送邮件的技巧,在此总结一下自己猜的坑。

安装参考:https://blog.51cto.com/13043516/2139030

实验环境

centos7

一、安装(共两步)

步骤一:安装sendmail

yum -y install sendmail
centos 7 邮件发送
centos 7 邮件发送

步骤二:安装mailx

yum -y install mailx
centos 7 邮件发送
centos 7 邮件发送

二、测试(两种方式)

方式一:通过文件内容发送

1)创建报警文件 vi test.txt
centos 7 邮件发送

2)发送测试邮件 mail -s '主题' 邮箱 < test.txt
centos 7 邮件发送
注:文件需要提前创建,内容就是报警提示,必须是文件的绝对路径!

3)查看邮箱是否收到测试邮件
centos 7 邮件发送

方式二:通过管道符直接发送

1)echo '报警提示' | mail -s '主题' 邮箱
centos 7 邮件发送

2)查看邮箱是否收到测试邮件
centos 7 邮件发送

三、设置发件人信息

配置sendmail配置文件 vi /etc/mail.rc

set from=邮箱
set smtp=指定邮箱使用的协议
set smtp-auth-user=用户名
set smtp-auth-password=密码
set smtp-auth=login
注:默认在centos7上/etc/mail.rc下没有这些,那可能有童鞋会问,那你写这个干嘛用?问的好,其实呢!我们不写就可以直接使用,但是对于一些比较特殊的邮箱使用的协议不一样,而我们这默认用的是SMTP协议;例如QQ邮箱他默认协议不一样,所以会直接丢到垃圾桶不会给我们提示信息,而我们做这一步的主要作用是,指定一下邮箱具体使用,如:邮箱账户、邮箱使用协议、账户名和密码等等。这样呢,当邮箱收到邮件后会提示你有未查看的邮件,不会像之前一样不提示直接丢到垃圾桶,总之一句话,要想用起来减少问题更好用,尽量添加以上这些指定信息!

四、查看队列

使用命令查看队列 mailq

centos 7 邮件发送
注:从上边的队列信息上可以看出暂时没有邮件发送任务!

五、查看日志

查看sendmail日志信息

tail -f /var/log/maillog
centos 7 邮件发送

六:下面说说我踩过的坑:

按照以上步骤在实际操作中,到了第三步碰到了问题:

问题1:邮箱不可用 550 User has no permission

解决方法:见下图,登陆设置的邮箱,在‘设置’-‘客户端授权密码’-开启,然后使用设置授权码替代邮箱密码,即可解决该问题。

centos 7 邮件发送

问题2: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,保存即可。

但是,即使有了证书依然出现“Error in certificate: Peer's certificate issuer is not recognized.”提示。证书并没有得到认可,需要再运行一下如下命令:

certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

说明:先找到证书位置,在运行"certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu"  -d ./ -i qq.crt " 。

至此,在测试发送邮件,成功发送。