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

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

实验环境

centos7

一、安装(共两步)

步骤一:安装sendmail

yum -y install sendmail

测试 centos 发送邮件 centos7 sendmail_mail

测试 centos 发送邮件 centos7 sendmail_mail_02

步骤二:安装mailx

yum -y install mailx

测试 centos 发送邮件 centos7 sendmail_解决方法_03

测试 centos 发送邮件 centos7 sendmail_centos_04

二、测试(两种方式)

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

1)创建报警文件 vi test.txt

测试 centos 发送邮件 centos7 sendmail_Centos_05

2)发送测试邮件 mail -s '主题' 邮箱 < test.txt

测试 centos 发送邮件 centos7 sendmail_centos_06

注:文件需要提前创建,内容就是报警提示,必须是文件的绝对路径!3)查看邮箱是否收到测试邮件

测试 centos 发送邮件 centos7 sendmail_mail_07

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

1)echo '报警提示' | mail -s '主题' 邮箱

测试 centos 发送邮件 centos7 sendmail_Centos_08

2)查看邮箱是否收到测试邮件

测试 centos 发送邮件 centos7 sendmail_centos_09

三、设置发件人信息

配置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 发送邮件 centos7 sendmail_解决方法_10

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

五、查看日志

查看sendmail日志信息

tail -f /var/log/maillog

测试 centos 发送邮件 centos7 sendmail_测试 centos 发送邮件_11

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

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

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

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

测试 centos 发送邮件 centos7 sendmail_Centos_12

问题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 " 。

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

===========================================

另外如果你是阿里云的企业邮箱,可参考以下链接:

https://wsem.net.cn/linux-mailx_1529_vps-space-webhost.html/amp

简单说一下步骤:

1.先安装sendmail和mailx,详细安装方法见上面。

2.在参考上面文章的时候,我碰到了个问题,就是无法解析证书,我的解决方法是:

--》关闭防火墙 systemctl stop firewalld

--》重新生成证书,具体步骤参考上面这个链接https://wsem.net.cn/linux-mailx_1529_vps-space-webhost.html/amp