测试了一下阿里云的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"
完工。