測試了一下阿里雲的VPC,發現VPC下的ECS主機都不能發送郵件。
我們先來看看以前我們再LINUX下如何發送郵件呢?很簡單
yum install mailx -y \cp /etc/mail.rc{,.bk} cat >> /etc/mail.rc <<EOF set from=jiankong@163.com set smtp=smtp.163.com set smtp-auth-user=jiankong@163.com set smtp-auth-password=123456 set smtp-auth=login EOF
然后,echo "內容"|mail -s "標題" 郵箱地址,就能發送郵件,而我一般都是寫139的郵箱地址,因為能直接到手機了。
如果是經典網絡,阿里雲是不限制的。但是阿里雲的專有網絡主機卻把25端口出口方向限制了。
通過工單和阿里雲技術溝通,主要有2點可以繞過。
1、不使用25端口。
2、申請解封
第一點可以使用465和80端口。
第二點是基於彈性IP,我測試階段暫時用不到彈性IP。
使用465端口
vim /etc/mail.rc
set from=baojing@QQ企業郵箱
set smtp=smtps://smtp.exmail.qq.com:465
set smtp-auth-user=baojing@QQ企業郵箱
set smtp-auth-password=123456
set smtp-auth=login
set nss-config-dir=/etc/pki/nssdb/
set ssl-verify=ignore
cd /etc/pki/nssdb
獲取證書文件
echo -n | openssl s_client -connect smtp.exmail.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./qq.crt
添加證書到證書數據庫中
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
使用80端口
使用阿里雲企業郵箱免費版也可以發信
set smtp=smtp.mxhichina.com:80
使用其他方法
既然這些主機在添加了NAT網關后都能請求外網,我是不是可以通過請求一台可以發送郵件的服務器幫忙轉發出去?
實現很簡單。
我寫了一個名為qOQBVnhLlEOjgjx.php的PHP文件(名字盡量復雜點,你懂得。)
<?php $content = $_GET['content']; $title = $_GET['title']; shell_exec("echo '$content' | /bin/mail -s '$title' your@139.com"); ?>
OK,利用PHP的內置函數調用系統MAIL命令實現發送郵件。
最后,我們在專有網絡主機上測試。
curl "http://www.abc.com/qOQBVnhLlEOjgjx.php?content=mysql oom&title=mysql down on 1.2.3.4"
完工。