使用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

使用sendemail发送邮件遇到的坑

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

使用sendemail发送邮件遇到的坑

上一篇:Shell+Curl监控网站页面访问状态,利用SendEmail发邮件通知


下一篇:分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署