一、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
再次发送邮件测试,可以看到已经发送成功,并且没有提示版本问题或者报错了。