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
相关推荐
晓衣3 小时前
2025“獬豸杯”全国电子数据取证竞赛-k8s服务器取证wp
服务器·经验分享·程序人生·网络安全·容器·kubernetes·学习方法
我爱云计算3 小时前
K8S详解(5万字详细教程)
linux·运维·云原生·容器·kubernetes
2301_794333915 小时前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室
荣光波比6 小时前
Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
linux·运维·服务器·nginx·云计算
武文斌776 小时前
单片机:DS18B20测温度、74HC595扩展芯片、8*8LED矩阵
运维·服务器·单片机·嵌入式硬件
阿sir1987 小时前
ZYNQ 自定义IP
服务器·网络·tcp/ip
绿箭柠檬茶9 小时前
Ubuntu 使用 Samba 共享文件夹
linux·运维·ubuntu
工藤新一¹10 小时前
Linux —— 虚拟进程地址空间
linux·运维·服务器·c/c++·虚拟进程地址空间
Aspiresky10 小时前
浅析Linux内核scatter-gather list实现
linux·dma·scatter/gather
奔跑吧 android11 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】
linux·数据结构·input·kernel·input_dev·input_handler·input_handle