使用阿里云服务器写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邮件的三个形式的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本自动配置发送qq邮件

调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程

SpringBoot项目本地可以发送邮件,部署到阿里云服务器发送邮件失败的解决方法

阿里云服务器怎么设置能让网站发邮件

QQ 发送邮件

阿里云ECS发送邮件到腾讯企业邮箱