使用阿里云服务器写shell脚本发送qq邮件的三个形式
Posted xuziyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用阿里云服务器写shell脚本发送qq邮件的三个形式相关的知识,希望对你有一定的参考价值。
【准备工作】
IPtables的使用如下命令:(执行以下以下命令把25和465端口打开)
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 465 -j ACCEPT
要先开启
经过以上的三步我们就可以得到授权码啦
【 启动postfix】
#sendmial
service sendmail stop
chkconfig sendmail off
【postfix】
service postfix start
chkconfig postfix on
【如果postfix start失败】
[[email protected] ~]# postfix check
postfix: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
[[email protected] ~]# rpm -qa|grep mysql
[[email protected] ~]# yum install mysql-libs
【创建认证】
mkdir -p /root/.certs/ ##先创建这个文件夹
下边这一大段你直接全部复制然后按回车即可,任意目录,不必犹豫!!!
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p‘ > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
cd /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.cr
【坑1】如果你用的是阿里云服务器,那么这里有大坑下边会有讲解
【配置mail.rc】
vi /etc/mail.rc
set [email protected] ##你发邮件的邮箱
set smtp=smtp.qq.com
set smtp-auth-user=2643854124
#授权码
set smtp-auth-password=dqiqzlqpslvxdieb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/root/.certs
【安装mailx】
yum -y install mailx
【 查看证书是否可读写】
cd /root/.certs
-rw-r--r-- 1 root root 65536 Apr 14 10:58 cert8.db
-rw-r--r-- 1 root root 16384 Apr 14 10:58 key3.db
-rw-r--r-- 1 root root 2529 Apr 11 22:06 qq.crt
-rw-r--r-- 1 root root 16384 Apr 11 21:16 secmod.db
[[email protected] .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qiye.aliyun.com.crt
一定要在这个目录下执行要不然会报错,或者是权限不是644
certutil: unable to open "qiye.aliyun.com.crt" for reading (-5950, 2).
但是,这时候你一定奇怪qiye.aliyun.com.crt是个什么鬼???!!是的这是阿里云的证书,所以我们还需要执行以下代码(啥都不要管直接复制执行就完事)
【
echo -n | openssl s_client -connect smtp.qiye.aliyun.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p‘ > ~/.certs/qiye.aliyun.com.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qiye.aliyun.com.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qiye.aliyun.com.crt
】
执行完以后再次查看发现qiye.aliyun.com.crt存在了
[[email protected] .certs]# ll
total 84
-rw-r--r-- 1 root root 65536 Apr 14 10:58 cert8.db
-rw-r--r-- 1 root root 16384 Apr 14 10:58 key3.db
-rw-r--r-- 1 root root 2281 Apr 11 22:22 qiye.aliyun.com.crt
-rw-r--r-- 1 root root 2529 Apr 11 22:06 qq.crt
-rw-r--r-- 1 root root 16384 Apr 11 21:16 secmod.db
这个时候我们再次执行
[[email protected] .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qiye.aliyun.com.crt
Notice: Trust flag u is set automatically if the private key is present. 【这才是正确的结果】
【测试形式1】
echo "hello word" | mail -s "title" [email protected](收邮件的邮箱)
这时候会报错
【could not connect: Connection timed out
"/root/dead.letter" 11/299
. . . message not sent.
could not connect: Connection timed out
"/root/dead.letter" 11/299
. . . message not sent.】
这个时候你需要在
vi /etc/mail.rc
把【set smtp=smtp.qq.com 】
改为
【set smtp=smtps://smtp.qq.com】
晚上也有说要改成
【smtps://smtp.qiye.aliyun.com:465】的,但是本人亲测报错
【Unexpected EOF on SMTP connection
"/root/dead.letter" 11/299
. . . message not sent.】
修改完成以后再次测试:瞬间收到邮件
echo "hello word" | mail -s "title" [email protected]
【测试形式2--附件】
先创建要发送的附件
cat mail_attachment.sh
#!/bin/bash
FROM_EMAIL="[email protected]"
TO_EMAIL="[email protected]"
LOG=/root/shell/ruozedata.log
echo -e "`date "+%Y-%m-%d %H:%M:%S"` : Please to check the fail sql attachement." | mailx
-r "From: alertAdmin <${FROM_EMAIL}>"
-a ${LOG}
-s "Critical:DSHS fail sql." ${TO_EMAIL}
【命令拓展】
https://ywnz.com/linux/mailx/
-A:执行帐户的命令的名称启动文件被读取之后。
-a:给定的文件附加到邮件中。
-B:使标准输入和标准输出线-缓冲。
-b:发送密件副本列表。列表应该是一个逗号分隔的名称列表。
-c:送炭复制到地址列表。
-D:开始在断开模式; 看到断开的变量的描述选项。
-d:启用调试消息和关闭消息的实际交付。 不像-v,此选项仅用于开发目的。
-e:只是检查是否有邮件系统邮箱。 如果是,返回零,否则,一个非零值退出状态。
-E:如果传出消息,不包含在它的第一个或唯一的消息部分的任何文字,不要把它丢弃,但它静静地,有效地设置在程序启动时的skipemptybody变量。这是一个从发送消息有用
的脚本由启动cron的。
-f:阅读在用户的邮箱中的内容(或文件时 ,如果指定)进行处理; 当mailx的是退出,将其写入未删除的邮件恢复该文件。 该字符串作为文件处理描述为文件夹命令如下。
-F:保存要发送的消息中的第一个收件人的地址的本地部分命名的文件。
-H:打印头汇总所有消息并退出。
-h:调用的sendmail与指定的跃点数。此选项没有在使用SMTP发送邮件的效果。
-i:TTY忽略中断信号。使用mailx的对噪音的电话线时,这是非常有用的。
-I:显示了“ 新闻组:‘或‘ 文章ID:‘在标题汇总字段。只有在与-f结合使用时适用。
-n:禁止阅读/etc/mail.rc启动时。这个选项应该适用于对多台计算机调用mailx的脚 本来启动,因为文件的内容,它们之间可能有所不同。
-N:阅读邮件或编辑邮件文件夹时禁止消息头的初始显示。
-q:启动与指定的文件的内容的消息。 可仅在发送模式给出。
-r:设置发件人地址。忽略任何从指定的变量环境变量或启动文件。波浪号逃逸被禁用。该-r地址选项被传递到邮件传输代理,除非使用SMTP。此选项存在唯一的相容性;它建议,
而不是直接设置从变量。
-R:如果打开文件夹的只读打开它们。
-s:指定主题的命令行(仅后-s标志作为主题的第一个参数,要注意引用包含空格的科目)。
-S:设置内部选项变量变量的可选值的价值 。
-T:写“ 邮件ID:”和“ 文章ID:‘读入文件名 ??的每个消息头字段。暗示我压缩文件的处理所描述的文件夹命令如下。
-t:要发送的消息,预计将包含一个消息头“收件人:”,“抄送”或“密件抄送:”字段给收件人。 在命令行上指定的收件人将被忽略。
-u:读取用户的用户的邮箱。
-v:详细模式。 递送的详细信息显示在用户的终端上。
-V:显示版本信息并退出。
- ?:启用波浪逃逸 ,即使不是在交互模式。
【测试形式三】
用发送html格式的邮件。如果你是云主机,我找遍了晚上大大小小的解决方案,均行不通。如果你成功了,可以一起交流。
以上是关于使用阿里云服务器写shell脚本发送qq邮件的三个形式的主要内容,如果未能解决你的问题,请参考以下文章
调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程