shell邮件发送脚本

先上整体代码

text.sh

bash 复制代码
#!/bin/bash

# 设置收件人邮箱
to="123456@qq.com"

# 设置发件人邮箱
from="21331@qq.com"

# 设置邮件主题
subject="Test Email"

# 设置邮件内容
body="This is a test email."

# 发送邮件
echo "${body}" | mail -s "${subject}" -r "${from}" "${to}"

再说详细配置,以及思路

一.配置qq邮箱(需要生成授权码)

QQ邮箱-POP服务开启步骤:

1、使用电脑登录mail.qq.com,进入【设置】;

2、换到【账户】选项;

3、在POP3/IMAP... CalDAV服务下,将【POP3/SMTP服务】开启;

4、通过扫一扫/一键验证/手机令牌/短信验证方式获取授权码,并记住此授权码

(注:若POP3/SMTP已开启,直接点击生成授权码,使用授权码登录第三方客户端。用于登录TIM);

5、将收取选项从最近30天改为全部,并勾选以下四个选项;

6、点击【保存更改】完成设置,使用授权码登录邮箱。

二.配置linux环境

1.直接运行以下命令自动追加内容

bash 复制代码
#未加密的发送方式通过25端口,会被公有云封掉.
cat >>/etc/mail.rc <<EOF
set from=12121@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=12121@qq.com
set smtp-auth-password=授权码
set smtp-auth=login
EOF

#加密的方式465端口
cat >>/etc/mail.rc <<EOF
set nss-config-dir=/etc/pki/nssdb/          #加密方式配置
set smtp-user-starttls                      #加密方式配置
set ssl-verify=ignore                       #加密方式配置
set from=12121@qq.com                       #配置发件人
set smtp=smtps://smtp.qq.com:465            #配置使用qq邮箱发送邮件,不加密方式参考上面
set smtp-auth-user=12121@qq.com             #邮箱名
set smtp-auth-password=授权码                #授权码
set smtp-auth=login                         #认证形式
EOF

2.或者在根目录下找到/etc/mail.rc文件

在最后添加(未加密采用未加密的,想用加密采用加密的)

bash 复制代码
#采用未加密:
set from=12121@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=12121@qq.com
set smtp-auth-password=授权码
set smtp-auth=login

#采用加密
set nss-config-dir=/etc/pki/nssdb/          #加密方式配置
set smtp-user-starttls                      #加密方式配置
set ssl-verify=ignore                       #加密方式配置
set from=12121@qq.com                       #配置发件人
set smtp=smtps://smtp.qq.com:465            #配置使用qq邮箱发送邮件,不加密方式参考上面
set smtp-auth-user=12121@qq.com             #邮箱名
set smtp-auth-password=授权码                #授权码
set smtp-auth=login  

三.运行text.sh(三种方式都可以运行)

bash 复制代码
1. bash text.sh
指明先用bash解析器解析
如果bash不存在 才会使用默认解析器
2. ./text.sh
./xxx.sh :先按照 文件中#!指定的解析器解析
如果#!指定指定的解析器不存在 才会使用系统默认的解析器
3. . text.sh
直接使用默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的

(注意:脚本文件权限问题)

如果此时成功了,便可以收到邮件,如果没有继续往下(一般是不会发送成功)

四.报错

#发送完邮件后报错

Error in certificate: Peer's certificate issuer is not recognized.

或者是其他的(其他的一般是账号,授权码不一致的问题导致的)

如果报错:Error in certificate: Peer's certificate issuer is not recognized.

说明是证书没有配置导致的

此时需要配置证书

1.检查系统是否安装mailx,一般centos都会自带,如果没有运行yum -y install mail

bash 复制代码
[root@catchfires ~]# rpm -qa |grep mailx
mailx-12.4-10.el6_10.x86_64

2./etc/pki/nssdb 目录查看证书,没有放qq.crt的证书,解决方法如下

bash 复制代码
[root@catchfires ~]# cd /etc/pki/nssdb/
[root@catchfires nssdb]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./qq.crt
[root@catchfires nssdb]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu"  -d ./ -i qq.crt //添加一个证书到证书数据库中
[root@catchfires nssdb]# echo "test" |mail -s test 123456@qq.com
// 如果没有certutil命令,可以运行yum install -y nss-tools

3.再次运行shell脚本,发现成功并且没有报错

4.下面开始添加网络监控系统及时报警,大致的逻辑是1分钟一次统计网络丢包情况,如果丢包> 2%时,发送邮件。

bash 复制代码
[root@catchfires ~]# cat /etc/crontab |grep moniter
 */1 * * * * root /root/moniter.sh #添加一分钟一次的网络监控程序
[root@catchfires ~]# cat /root/moniter.sh
#!/bin/bash
ping 223.5.5.5 -n -i 0.5 -q -w 50 -W 1|xargs|awk '{echo -e "\n";printf("%-10s %-15s %6s %s/%s %40s\n",strftime("%F %H:%M:%S"),$2, $18, $13, $16, $26)}' >>/tmp/moniter.log

ping1=`tail /tmp/moniter.log|grep -v " 0%"|grep -v " 1%"|grep -v " 2%"|awk '{print $4" "$3" "$2" "$1}'|tail -n1`
ping2=`tail /tmp/moniter.log|grep -v " 0%"|grep -v " 1%"|grep -v " 2%"|awk '{print $4}'|cut -f1 -d%|tail -n1`
if [ $ping2 -gt 3 ] #bash的判断相当恶心,if前后,[]前后都必须有空格
then
echo $ping1 |mail -s "$ping1" 123456qq.com
fi
相关推荐
小O_好好学7 分钟前
CentOS 7文件系统
linux·运维·centos
john_hjy38 分钟前
11. 异步编程
运维·服务器·javascript
x晕x41 分钟前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
活跃的煤矿打工人1 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
fasewer2 小时前
第五章 linux实战-挖矿 二
linux·运维·服务器
楚灵魈2 小时前
[Linux]从零开始的网站搭建教程
linux·运维·服务器
小小不董2 小时前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
豆豆3 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
这可就有点麻烦了3 小时前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
DY009J3 小时前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器