我的centos7.x是新装的系统,暂未开启任何邮箱服务
常说的mail、mailx和sendmail
-
mail用户代理(客户端),是mailx的别名, mail和mailx是同一个东西
-
sendmail是邮件传输代理(服务器),
1. 安装mailx
yum install mailx
2. 获取邮箱第三方登录授权码
以qq邮箱为例,“设置”–>“账户”
账号往下翻,找到POP3/IMAP…,开启pop3/SMTP、IMAP/SMTP,点击生成授权码,手机验证
复制授权码
3. 生成证书
mkdir -p /root/.certs 创建证书目录
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt #获取邮件服务器证书
chmod +x /root/.certs/qq.crt #qq.crt 添加执行权限
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt #添加SSL证书到数据库
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt #添加global证书到数据库
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt #指定受信任证书,防报错
certutil -L -d /root/.certs #列出安全数据库中的证书
4. 配置mail
mail命令的系统级配置文件是/etc/mail.rc
vi /etc/mail.rc
# For Linux and BSD, this should be set.
set bsdcompat
set [email protected] #设置邮件发送方
set smtp=smtps://smtp.qq.com:465 #邮件服务器,我这里是qq
set [email protected] #smtp验证用户邮箱
set smtp-auth-password=cdesllrlz111111 #邮箱授权码
set smtp-auth=login #认证方式
set ssl-verify=ignore #忽略SSL验证
set nss-config-dir=/root/.certs #证书目录
#set smtp-use-starttls=yes # STARTTLS时使用
5. 邮箱测试
echo " 邮件正文内容 " | mail -s " 邮件主题 " 目的地邮箱地址@xx.com
等待~叮 邮箱就收到消息啦
证书,配置严格按格式、步骤来一般就不会报错
6. 报错大合集
1.Could not resolve host: //smtp.qq.com
编辑配置文件:
set smtp= smtps:// smtp.xxx.com:465 # 这里填入smtp地址
465端口 465端口,需要加上smtps://协议;如果是587端口,不需要加smtps://或者写smtp://
端口465用于smtpsSSL加密在任何SMTP级别通信之前自动启动。端口587用于msa它几乎像标准SMTP端口。
出现Could not resolve host:时,一定要检查Could not resolve host:之后提示的内容,在/etc/mail.rc配置文档中,修改或注释(文档自己有的注释掉;自己添加的检查错误)
2.“Unexpected EOF on SMTP connection”
基本上是由于端口只支持SMTPS导致,将协议改成smtps://即可。
3.出现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”
$ cat /home/gaoxiaoxue/space.sh
7写监控脚本!
# !/bin/sh
email=" [email protected] " 收件邮箱
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条件成立的时候)
做个定时任务就好啦,可查看我别的文档 “完整小白版,crontab定时任务操作步骤”