python2.7发送邮件失败之——邮箱安全问题
使用python2.7发送邮件,通过脚本调试,脚本运行通过成功发出了邮件,但是目标邮箱qq没有收到。
刚开始怀疑脚本问题,上网查找资料后,发现邮箱发送成功后目标邮件没有收到有可能有以下几种原因:
1、邮件正在传递途中。
Email的发送过程不是同步的,各个传递中继处理需要时间;如果发送方服务器或者收信方服务器短时间内囤积了大批量邮件传递任务,也会有一定的时间去排队。这个周期最长是三天,如果三天内投递不成功,发件箱会有退信通知的。
2、邮件在多个服务器或网段之间传递,延迟或拒绝投递。
不同邮件域名或邮件服务器直接Email传递有一个过程,这个一般要几个小时甚至更长时间。如果这些服务器不在同一个网段,那么这封Email的传递过程肯定不是即时的。例如从Gmail邮箱给QQ邮箱发送邮件,经常会遇到这个情况,特别是用软件做邮件群发的过程中,短时间内的大量邮件会造成网络堵塞,从而降低了传递速度;而这个时候用网页直接发送,选择的路由与客户端发送的路由是不同的,速度则会提高,没有可比性。
另一方面,服务器也会决绝投递跨网域的Email。比如用QQ邮箱去发送QQ邮箱,很快就能收到了,而用sina邮箱通过SMTP去发送Email给QQ邮箱,数量稍微多一些或者内容稍有重复,新浪邮箱服务器往往拒绝投递而不做任何通知;但也不全部是这样的,比如Gmail邮箱去发送QQ邮件,如果拒绝投递,会Email通知你。
3、收信服务器或者收件人直接拒收或丢弃。
这种情况有很多种,这里着重说一下黑名单机制。服务器端要维护一个域名黑名单,对于每封过来的邮件,判断其所在域是否在这个黑名单中,形象的说,你的邮件地址是xxx@abot.cn,那么所有来自@后面的这个段的Email,都会被Block掉,但这不是等价的,比如你的Email地址是xxx@qunfa.abot.cn,根据算法,同样符合abot.cn这个黑名单规则。
另一种就是内容过滤,比如网易系列邮箱经常会提高安全级别,将来自网易系列邮箱(163、126、yeah等)之外的,内容中包含附件、http字样的内容全部拒收或直接丢弃。21cn、sohu之类的收件服务器对此过滤较为严格。
4、进入垃圾邮件了。
这种情况是很常见的,如果某个客户端发送频率过高,或者包含大量可疑为垃圾邮件内容的关键字,甚至收件人将你的email地址列入黑名单,你发过去的邮件,都会被判断垃圾邮件。
5、发件服务器(SMTP服务器)不通知的情况下丢邮件。
这种情况在新浪和网易邮箱中最为常见,包括sina.com和sina.cn,以及163、126、yeah等,这几个邮箱发出去的邮件。这类SMTP服务器认为某个账号可能群发邮件时候,会悄悄放弃传递,而告之用户投递成功,做法与Gmail相反。
6、被发送方客户端或者服务器的杀毒软件或者防火墙过滤掉。
客户端电脑的情况:如果客户端安装了瑞星、诺顿、卡巴斯基等杀毒软件或者防火墙之类的软件,并且设置了严格的网络过滤规则,他们可能过滤掉正常的电子邮件。
服务前段过滤的情况:如果服务器端对内容检查比较严格,通过其SMTP传递Email会变得非常困难,比如sohu.com以及21cn.com等邮箱,虽然是开通SMTP服务了,但是他们的杀毒软件检查太严格,即使是正常的邮件内容,也很难通过他们传递出去。
我判断应该是目标邮箱安全方面的问题,于是我查看我的发送邮箱,发现发送出去的邮件真的是由于安全问题被退回,信息如下:
我试着更改了另一个目标邮箱,目标邮箱成功收到邮件:
实现代码如下:
from email.header import Header
from email.mime.text import MIMEText
import smtplib
#发送邮箱
sender='yq_test@126.com'
password='123456'
#接受邮箱
receiver='41618174@qq.com'
smtpserver='smtp.126.com'
subject='python email test'
msg=MIMEText('下雨了,大家关好窗户','plain','utf-8')
msg['Subject']=Header(subject,'utf-8')
msg['From']=sender
msg['to']=receiver
try:
smtp=smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(sender,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()
print "邮件发送成功"
except smtplib.SMTPException:
print "Error:无法发邮件"
各位看官,看完后不要忘了为我乐于分享的精神点个赞哦
python2.7发送邮件失败之——邮箱安全问题的更多相关文章
- python2.7发送邮件失败之——代码问题
使用python2.7发送邮件,代码如下: from email.header import Headerfrom email.mime.text import MIMETextimport smtp ...
- python2.7发送邮件失败之——SMTPAuthenticationError问题
使用python2.7发送邮件,代码如下: from email.header import Headerfrom email.mime.text import MIMETextimport smtp ...
- python通过SMTP发送邮件失败,报错505/535
python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 我们使用pyth ...
- (转)解决jdk1.8中发送邮件失败(handshake_failure)问题
解决jdk1.8中发送邮件失败(handshake_failure)问题 作者 zhisheng_tian 2016.08.12 22:44* 字数 1573 阅读 2818评论 6喜欢 9 暑假在家 ...
- Linux SendMail发送邮件失败诊断案例(四)
最近又碰到一起Linux下SendMail发送邮件失败的案例,邮件发送后,邮箱收不到具体邮件, 查看日志/var/log/maillog 发现有"DSN: User unknown" ...
- Jenkins 邮件配置 || Jenkins 发送邮件失败,提示:Error sending to the following VALID addresses
jenkins---系统管理---系统设置 在Jenkins URL下填写URL链接 在系统管理员邮件地址下填写发件邮箱,这将是以后发送邮件通知的发件人 如果下载了外部邮件通知 配置一下SMTP se ...
- JDK1.8导致发送邮件失败
问题:本地JDK1.6测试可以发送邮件,但是linux上jdk1.8发送邮件失败.报错: Sending the email to the following server failed : smtp ...
- Linux SendMail发送邮件失败诊断案例(三)
一Linux服务器突然发送不出邮件,检查了很多地方都没有发现异常,检查/var/log/maillog发现如下具体信息: Apr 12 00:36:04 mylinux sendmail[4685]: ...
- C# 使用 SmtpClient.SendAsync 方法发送邮件失败,总是返回 Cancelled
问题: 调用 SmtpClient.SendAsync,在 SendCompleted 的回调函数里面总是获取到 e.Cancelled 为 true. 后来测试了一下,相同的代码,只是把 SmtpC ...
随机推荐
- YC-Framework版本更新:V1.0.3
分布式微服务框架:YC-Framework版本更新V1.0.3!!! 本次版本V1.0.3更新 集成分布式事务Seata: 集成分布式事务Tx-LCN: 集成Kafka: 集成RocketMQ: 集成 ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
- java IO操作和计算操作:工作内存和主内存 volatile关键字作用;原子操作对象AtomicInteger ....
应该停止但无法停止的计算线程 如下线程示例,线程实例中while循环中的条件,在主线程中通过调用实例方法更新后,while循环并没有更新判断变量是否还成立.而是陷入了while(true)死循环. i ...
- Shell 丢弃错误和输出信息
shell中使用>/dev/null 2>&1 丢弃信息 在一些Shell脚本中,特别是Crontab的脚本中,经常会看到 >/dev/null 2>&1这 ...
- C# 使用Fluent API 创建自己的DSL
DSL(Domain Specified Language)领域专用语言是描述特定领域问题的语言,听起来很唬人,其实不是什么高深的东西.看一下下面的代码: using FlunetApiDemo; v ...
- SQL优化一例:通过改变分组条件(减少计算次数)来提高效率
#与各人授权日期相关,所以有十万用户,就有十万次查询(相关子查询) @Run.ExecuteSql("更新各人应听正课数",@"update bi_data.study_ ...
- 如何在Uni-app中通过腾讯IM SDK实现社交应用和直播互动等功能
Uni-app想开发社交应用.IM.店铺客服.嵌入式社交模块.在线直播互动,这些功能Uni-app官方也没提供SDK,怎么办呢?找IM老大腾讯云啊,今天我们就在Uni-app中把腾讯云即时通讯TXIM ...
- mybatis注解版in查询、字符串判空模糊匹配 、批量插入、插入返回主键
IN查询 @Select({"<script> " + " select * "+ " from business_threat bt \ ...
- layDate设置开始日期选择框和结束日期选择框 之间的相互验证方法
var startDate = laydate.render({ elem: '#_select_start_date', //结束日期框的ID type: 'date', done: functio ...
- cmake之if
note if 要 与endif配对使用 语法含义 表达式 含义 if (not expression) 与 expression相反 if (var1 AND var2) var1与var2都为真时 ...