在阿里云上发送邮件

因项目需要,要在阿里云服务器上向外界发送邮件,之前也试过sendEmail失败,遂改用mailx

阿里云为了防止其服务器被当做垃圾邮件发送服务器禁止了邮件端口 25 的使用,这就造成系统级的提醒邮件无法发送

 

但是有个小瑕疵就是每次发送完邮件后,在命令行里会提示“Error in certificate: Peer's certificate issuer is not recognized.”这样的证书没有获得认可的警告提示,虽然并不影响邮件的发送,但总是有“不科学”的感觉呀?还好有万能的度娘和谷姐,一番搜寻后终于完美解决了,

运行命令:

yum -y install mailx

即可自动安装 mailx 了。安装完成后,编辑 /etc/mail.rc 文件配置 mailx 使用 QQ 邮箱作为发送邮件邮箱。

set [email protected]
set smtp=smtps://smtp.qq.com:465
set [email protected]
set smtp-auth-password=你的 QQ 邮箱授权码
set smtp-auth=login
#set smtp-use-starttls 这里是不需要配置的,很多地方没说明,配置了反而会验证失败,所以我注释掉;
set ssl-verify=ignore
set nss-config-dir=/root/.certs

 

 

这里也可用163邮箱作为发送邮箱

set [email protected]      (你的163邮箱)
set smtp=smtp.163.com:465     (163邮箱默认就用这个)
set [email protected]     (与第一行的一致)
set smtp-auth-password=aaaaaaa     (这里等号后面填写的是163邮箱的客户端授权密码)
set smtp-auth=login                  (登录方式)

 

因为阿里云 ECS 封禁了 25 端口,所以我们只能使用 TLS 方式(TSL 也就是使用 SSL 加密的方式,使用 465 或者其他端口来发送邮件)绕过 25 端口需求来发送邮件,所以必须先获得邮箱的 SSL 证书并存放到本地,最后一行的 nss-config-dir 就是制定的存放 QQ 邮箱 SSL 证书的位置。

因为需要 QQ 邮箱的 SSL 证书,所以我们还需要手动的获取 QQ 邮箱的证书保存到本地指定的目录里以备调用和验证,具体命令如下:

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

为了防止出现前文所说的发送邮件警告提示,还需要进入邮箱 SSL 证书存放目录 /root/.certs 里执行如下命令:

certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

返回如下提示即可:

**Notice: Trust flag u is set automatically if the private key is present.**

这是为了信任证书的标记操作。

注意:执行上述语句的时候会报错,说qq.crt没有可执行权限,具体在哪一步忘记了,遇到了赋予权限就好,我是直接给了可读可写可执行的权限,指令:     chmod 777 qq.crt   需要先cd到/root/.certs/ 目录

至此,已经完成了 mailx 结合 QQ 邮箱发送系统邮件的部署了,通过命令行发送测试邮件试试吧:

mailx -s "邮箱测试" [email protected] < message_file.txt

命令行解读:发送主题为“邮箱测试”,内容为当前目录下 message_fiel.txt 文件内容到 [email protected] 邮箱。

或发送

echo "1111" | mail -s "mysql is stop"    [email protected]
echo "TEST" | mail -s "Title" [email protected]

 

关于授权码的获取

 

在QQ邮箱中

登录进入 QQ 邮箱,点击设置 >> 帐户页面,找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”选项,然后开启“POP3/SMTP 服务”之后点击下方的『生成授权码』按钮然后根据步骤操作即可获取 QQ 邮箱授权码。

在阿里云上发送邮件

 

 

在163邮箱中

首先登录网页163邮箱,然后进入“设置”选项,再进入“POP3/SMTP/IMAP”,如下图所示

在阿里云上发送邮件

 

 

 

 

 

接收邮件的邮箱的相关设置

我在用QQ邮箱作为接收邮件的邮箱时,如果我不对163邮箱设置白名单,则QQ邮箱就不会接收到mail命令发送的邮件

首先进入QQ邮箱网页版,然后进入设置,,进入反垃圾,设置白名单:

在阿里云上发送邮件

然后填写上发送邮箱的邮箱地址,点击“添加到白名单”即可:

在阿里云上发送邮件

 

 

参考链接:1