1. 程式人生 > >使用阿裏雲服務器寫shell腳本發送qq郵件的三個形式

使用阿裏雲服務器寫shell腳本發送qq郵件的三個形式

給定 技術 附加 mod red 不同 openssl 代碼 可能

【準備工作】

技術分享圖片

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郵件的三個形式