AI智能
改变未来

使用sendemail发送邮件遇到的坑

一、sendemail安装(可以去阿里云仓库找找)

wget https://mirrors.aliyun.com/epel/7/x86_64/Packages/s/sendemail-1.56-1.el7.noarch.rpm

yum -y install sendemail-1.56-1.el7.noarch.rpm

基本参数

-f  test@qq.com

发件人邮箱

-t  hehe@qq.com

收件人邮箱,添加多个时以空格隔开

-cc haha@qq.com

抄送

-bcc heihei@qq.com

暗抄送,也就是密送,密送人互相之间看不到,可以看到收件人和抄送人;但收件人和抄送人看不到密送人。

-s  smtp.exmail.qq.com

发件人邮箱的smtp服务器

-u  \”邮件标题\”

邮件的标题

-o  tls=<auto|yes|no>

是否加密

-o  message-content-type=<auto|text|html>

邮件内容的格式,html表示它是html格式

-o  message-charset=utf8

邮件内容编码

-xu  test@qq.com

发件人邮箱的用户名

-xp  12345

发件人邮箱的密码或者授权码

-m  \”邮件内容\”

邮件的具体内容

-a  \”file\”

添加附件,添加多个时以空格隔开

sendEmail乱码问题

正文乱码:

添加-o message-charset=utf-8即可,貌似再添加-o message-header=utf-8也没有问题

邮件标题乱码:

这个需要base64编码,邮件标题不能出现非ASCII码,所以必须转,常用的base64编码

使用base64编码来操作,base64不是加密,只是编码

在标题转化成base64后,需要声明一下编码,声明编码,加编码类型例如: =?UTF-8?B?,标题字符串后加:?=

端口:

25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。

465端口是SSL/TLS通讯协议的 内容一开始就被保护起来了 是看不到原文的。

587端口是STARTTLS协议的 属于TLS通讯协议 只是他是在STARTTLS命令执行后才对之后的原文进行保护的。

问题1:端口问题

报错:ERROR => Timeout while reading from smtp.exmail.qq.com:465 There was no response after 60 seconds.

解决方法:将465换成587,即为/usr/bin/sendemail -o tls=yes -s \”smtp.exmail.qq.com:587\” -f \”发送邮箱\” -t \”接收邮箱\” -xu \”发送邮箱\” -xp \”发送邮箱密码\” -u \”邮件标题\” -m \”邮件正文\”

问题2:perl模块“IO::Socket::SSL”未安装,或者版本太低造成的

报错:invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 444.

或者提示

*******************************************************************

 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client

 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER

 possibly with SSL_ca_file|SSL_ca_path for verification.

 If you really don\’t want to verify the certificate and keep the

 connection open to Man-In-The-Middle attacks please set

 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.

*******************************************************************

  at /usr/bin/sendemail line 1933.

解决方法有三:

1. vim /usr/bin/sendemail

第 1933 行,将 \’SSLv3 TLSv1\’ 修改为 \’SSLv23:!SSLv2\’

2. 如果脚本里面默认就是\’SSLv23:!SSLv2\’,可在发送的命令里加密去掉 tls=no

3. 安装或者升级perl模块“IO::Socket::SSL”

查看是否有SSL模块

perldoc perllocal|grep SSL

再次发送邮件测试,可以看到已经发送成功,并且没有提示版本问题或者报错了。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 使用sendemail发送邮件遇到的坑