使用sendemail发送邮件遇到的坑
2021/4/9 10:27:26
本文主要是介绍使用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发送邮件遇到的坑的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20实战:30 行代码做一个网页端的 AI 聊天助手
- 2024-11-185分钟搞懂大模型的重复惩罚后处理
- 2024-11-18基于Ollama和pgai的个人知识助手项目:用Postgres和向量扩展打造智能数据库
- 2024-11-15我用同一个提示测试了4款AI工具,看看谁设计的界面更棒
- 2024-11-15深度学习面试的时候,如何回答1x1卷积的作用
- 2024-11-15检索增强生成即服务:开发者的得力新帮手
- 2024-11-15技术与传统:人工智能时代的最后一袭纱丽
- 2024-11-15未结构化数据不仅仅是给嵌入用的:利用隐藏结构提升检索性能
- 2024-11-15Emotion项目实战:新手入门教程
- 2024-11-157 个开源库助你构建增强检索生成(RAG)、代理和 AI 搜索