记Linux下古老的发送邮件的方式-mail命令发送

今天同事突然说在阿里云ECS上面采用系统命令mail 发送邮件报错,勾起历史回忆,刚毕业参加工作那会写脚本工具,貌似用这样的方式居多。现在这种方式应该很少使用了吧,都是python封装工具,这里把使用 Linux mail如果正确配置发送邮件,重新梳理下


默认情况安装 mailx 之后,然后在 /etc/mail.rc 中配置好账号密码就可以正常使用 mail 来发送,比如操作如下:

# install mailx first
yum install -y mailx 

# add these information into /etc/mail.rc file 
# Add to send mail by linux system
set from=monitor@xxx.com
set smtp=smtp.exmail.qq.com
# notice: user must with @ksjgs.com as suffix
set smtp-auth-user=monitor@ksjgs.com
set smtp-auth-password=xxxxxxpsw
set smtp-auth=login
set ssl-verify=ignore

验证发送

# send demo
echo "Linux mail with exmail" | mail -s 'Subjuct: Linux Mail Test' xxx@yyy.com

执行之后默认就会收到测试邮件


但是这种方式在阿里云上执行会报错如下:

could not connect: Connection timed out
“/root/dead.letter” 11/318
. . . message not sent.

这种方式在非阿里云上面是没有问题的,但是阿里云限制了25端口,所以如上方式是发送失败的,需要采用 tls 465 端口才行

那如何在 Linux下利用 mail 配置smtp采用TLS协议发送邮件 呢,具体实践如下:

1、获取对应服务的证书保存为crt文件

注意:一般我们通过浏览器 https 可以看到证书的信息,但是该信息是不包括证书的内容的,内容可以通过 openssl s_client 来获取,具体如下

openssl s_client.png

2、利用 certutil 命令进行证书管理,具体详见 man certutil 或者 certutil -H command
注意:GeoTrust SSL证书是数字证书的一种

certutil-1.png

certutil-2.png

3、列举打印证书


show certs.png

4、Try to verify sending mail

# modify /etc/mail.rc to add nss-config-dir item
set nss-config-dir=/etc/mail-certs

# send demo
echo "Linux mail with exmail" | mail -s 'Subjuct: Linux Mail Test' xxx@yyy.com

Refer:

https://blog.espnlol.com/?p=335

https://www.cnblogs.com/kungfupanda/p/4637740.html


补充知识

1、报错信息如下,就是因为阿里云屏蔽25端口导致

smtp ssl协议端口465;非ssl协议端口25

could not connect: Connection timed out
“/root/dead.letter” 11/318
. . . message not sent.

2、报错信息如下,一般是因为配置 smtp-auth-user 没有添加邮箱后缀,也就是说 user是 userxxx@yyy.com 而不是 userxxx

root@pts/0 $ smtp-server: 535 Error: ��ʹ����Ȩ���¼�������뿴: <http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256>
"/root/dead.letter" 11/336
. . . message not sent.
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容