shell邮件发送脚本

1 篇文章 0 订阅

先上整体代码

text.sh

#!/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.直接运行以下命令自动追加内容

#未加密的发送方式通过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文件

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

#采用未加密:
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(三种方式都可以运行)

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

[root@catchfires ~]# rpm -qa |grep mailx
mailx-12.4-10.el6_10.x86_64

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

[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%时,发送邮件。

[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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 答:#!/bin/bash# 设置邮件服务器 MAIL_SERVER="smtp.example.com"# 设置邮件发送者 MAIL_FROM="sender@example.com"# 设置邮件接收者 MAIL_TO="recipient@example.com"# 设置邮件主题 SUBJECT="Test Email"# 设置邮件内容 MESSAGE="This is a test email sent from a shell script"# 发送邮件 /usr/sbin/sendmail -f "$MAIL_FROM" -t "$MAIL_TO" -u "$SUBJECT" -m "$MESSAGE" -S "$MAIL_SERVER" ### 回答2: 编写一个Shell脚本发送邮件可以使用邮件客户端程序来实现。以下是一个实现的示例脚本: ```bash #!/bin/bash to_email="recipient@example.com" # 邮件接收者的地址 from_email="sender@example.com" # 邮件发送者的地址 subject="测试邮件" # 邮件主题 body="这是一封测试邮件。" # 邮件正文 # 使用邮件客户端程序发送邮件 echo -e "To: $to_email\nFrom: $from_email\nSubject: $subject\n\n$body" | /usr/sbin/sendmail -t ``` 在脚本中,你需要设置邮件接收者的地址(to_email)、邮件发送者的地址(from_email)、邮件主题(subject)和邮件正文(body)。然后通过在命令行中输出邮件的标准格式,并通过管道将其传递给邮件客户端程序`/usr/sbin/sendmail`来发送邮件。 请注意,此脚本假设你的系统已经安装了sendmail邮件服务器软件,并且`/usr/sbin/sendmail`是sendmail可执行文件的路径。如果你的系统中使用的是其他邮件客户端程序,你需要相应地更改命令`/usr/sbin/sendmail`为你使用的程序的路径。 使用上述脚本发送邮件时,确保将邮件内容替换为实际的内容,并根据需要设置其他邮件相关的参数,例如附件、抄送、密送等。 希望这个脚本对你有所帮助! ### 回答3: 编写一个shell发送邮件脚本,可以使用邮件客户端工具如"mail"或者"sendmail"来实现。以下是一个示例脚本: ```shell #!/bin/bash # 设置邮件信息 from="your_email@example.com" # 发件人邮箱 to="recipient@example.com" # 收件人邮箱 subject="这是邮件的主题" # 邮件主题 body="这是邮件的正文内容" # 邮件正文 # 使用mail命令发送邮件 echo -e "Subject:${subject}\n${body}" | mail -s "${subject}" -r "${from}" "${to}" ``` 脚本使用了"mail"命令来发送邮件,参数如下: - `-s` 指定邮件主题 - `-r` 指定发件人邮箱 - 最后一个参数是收件人邮箱 脚本中"Subject"是一个特殊字段,用于指定邮件主题。脚本使用`echo`命令来生成邮件正文,然后通过管道将结果发送给"mail"命令。 注意:在使用该脚本之前,需要确保系统已经安装了邮件客户端工具如"mail"或者"sendmail"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

騒周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值