我的centos7.x是新装的系统,暂未开启任何邮箱服务
常说的mail、mailx和sendmail
-
mail用户代理(客户端),是mailx的别名, mail和mailx是同一个东西
-
sendmail是邮件传输代理(服务器),
1. 安装mailx
yum install mailx
2. 获取邮箱第三方登录授权码
以qq邮箱为例,“设置”–>“账户”
账号往下翻,找到POP3/IMAP…,开启pop3/SMTP、IMAP/SMTP,点击生成授权码,手机验证
复制授权码
3. 生成证书
后期使用中,用哪个账号发送邮件,就生成到谁的目录下!!
我用root
证书目录为/root/.certs
sudo mkdir -p /root/.certs 创建证书目录
sudo bash -c "echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/qq.crt " #获取邮件服务器证书
sudo chmod +x /root/.certs/qq.crt #qq.crt 添加执行权限
sudo bash -c 'certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/qq.crt' #添加global证书到数据库
sudo bash -c 'certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/qq.crt' #添加SSL证书到数据库
sudo bash -c 'certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs -i /root/.certs/qq.crt' #指定受信任证书,防报错
sudo certutil -L -d /root/.certs #列出安全数据库中的证书
注:执行sudo bash -c 'certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs -i /root/.certs/qq.crt'
会跳出“Notice: Trust flag u is set automatically if the private key is present.”
4. 配置mail
mail命令的系统级配置文件是/etc/mail.rc
vi /etc/mail.rc
# For Linux and BSD, this should be set.
set bsdcompat
set from=1111111@qq.com #设置邮件发送方
set smtp=smtps://smtp.qq.com:465 #邮件服务器,我这里是qq
set smtp-auth-user=1111111@qq.com #smtp验证用户邮箱
set smtp-auth-password=cdesllrlz111111 #邮箱授权码
set smtp-auth=login #认证方式
set ssl-verify=ignore #忽略SSL验证
set nss-config-dir=/root/.certs #证书目录
5. 邮箱测试
echo " 邮件正文内容 " | mail -s " 邮件主题 " 目的地邮箱地址@xx.com
#echo "看看会不会成功" |mail -s "这是条测试邮件" 111111@qq.com
等待~叮 邮箱就收到消息啦
证书,配置严格按格式、步骤来一般就不会报错
6. 报错大合集
报错1: smtp-server: 535 Login Fail,Please enter your authorization code to login....
报错: $ smtp-server: 535 Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
"/home/yy/dead.letter" 11/294
. . . message not sent.
解决:更新mail.rc配置文件里的授权码。原因第三方授权码过期或邮箱POP3/SMTP的服务没有开启
报错2:只有Error in certificate: Peer's certificate issuer is not recognized.
解决:会报错,但邮件能发出去解决。原因是证书有问题,重新生成(步骤在上面)
如果重新生成后执行还是报错Error in certificate: Peer's certificate issuer is not recognized
,再执行一遍以下命令:
sudo bash -c 'certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs -i /root/.certs/qq.crt'
报错3:Error initializing NSS: Unknown error -8015
$ Error initializing NSS: Unknown error -8015.
"/home/yyy/dead.letter" 11/323
. . . message not sent.
解决:执行发送邮件的用户不对,确认mail.rc配置里 set nss-config-dir= ???/.certs
写的是root,就用root账号执行邮件发送命令!!
有次测试,确认/etc/mail.rc跟执行命令的用户保持一致且已生成证书,执行命令仍报错。 将mail.rc跟执行用户都换成root又好了…没找到原因,仅做记录
报错4:Could not resolve host: //smtp.qq.com
解决:编辑配置文件:
set smtp= smtps:// smtp.xxx.com:465 # 这里填入smtp地址
465端口,需要加上smtps://协议; 如果是587端口,不需要加smtps://或者写smtp://
端口465用于smtps,SSL加密在任何SMTP级别通信之前自动启动。
端口587用于msa,它几乎像标准SMTP端口。
报错5:Unexpected EOF on SMTP connection
解决:基本上是由于端口只支持SMTPS导致,将协议改成smtps://即可。
报错6:出现502报错“smtp-server: 502 Invalid input from 122.238.160.241 to newxmesmtplogicsvrsza_”
解决:检查**/etc/mail.rc配置文档**中邮件地址的填写,填邮箱地址啊!
set from
跟 set smtp-auth-user
,一定要写邮箱地址啊!
设置成非邮箱地址,eg:用户名Bessssss,则会报错“smtp-server: 535 Login Fail
”
报错7:“Error in certificate: Peer’s certificate issuer has been marked as not trusted by the… message not sent.”
原因:执行发送邮件命令的用户权限问题。
解决:.cert/**.crt 是root还是普通用户的要注意区分!是否需要用sudo
7. 写监控脚本!
看一下我写的脚本,(新手写的脚本,比较的啰嗦)
cat /home/****/space.sh
# !/bin/sh
email=" 1111111@qq.com " 收件邮箱
df -Ph /dev/mapper/centos-home |awk '{print $4,$5}' | while read output;
do
echo $output
partition=$(echo $output | awk '{print $1 }')
used=$(echo $output |awk '{print $2}' |sed s/%//g)
if [[ $used -ge 85 ]] ; then 界限值
echo "$(hostname) 上的分区:剩余 " $partition " 已使用 $used% , $(date) " | mail -s " 143磁盘空间警报: $(hostname) 已使用 $used%" $email
fi
done
sh space.sh 手机就可以收到短信啦(当然是在你脚本if条件成立的时候)
做个定时任务就好啦,cron定时任务