前段时间查了个雅虎邮箱发送失败的问题,提示“554 Transaction failed : Cannot send message due to possible abuse; please visit http://postmaster.yahoo.com/abuse_smtp.html for more information”

去官网和网上搜看了不少帖子,也没有个清晰的头绪,只能认为邮件被当作垃圾邮件了,可能格式上存在问题,但问题是测试其他邮箱却没有问题。

最后还是通过查看rfc文档,查看到可疑的地方,经修改没有问题了,原因是设置boundary边界参数中带了‘#’字符,而rfc文档中没有包含该字符,去除后就可以正常发送雅虎邮箱了,不过也不明白为啥其他邮箱测试不存在这个问题,只能认为雅虎邮箱检测比较严格了。

顺带了解了下MIME协议,下面根据《计算机网络》及网上搜索做了些摘录整理。


MIME概述

SMTP(RFC2821)有如下缺点:
1、不能传送可执行文件或其他的二进制对象
2、限于传送7位的ASCII码,许多其他非因为国家的文字就无法传送
3、拒绝超过一定长度的邮件
4、有些SMTP的实现没有完全按照SMTP的因特网标准

在这种情况下,提出了通用因特网邮件扩展MIME(基本内容定义于RFC 2045-2049)。MIME并没有改动或取代SMTP,只是继续使用原来的邮件格式,但增加了邮件主体的结构,并定义传送非ASCII码的编码规则。两者的关系如图所示:


MIME主要包括以下三个部分内容
1)新增一些邮件头信息,用来协商MIME的一些参数
2)定义了许多邮件内容的格式
3)定义了传送编码,从而可以传送任意二进制文件

邮件头信息包含发件人、收件人、主题、MIME版本、邮件内容类型等重要信息,每条信息成为一个域,由域名后加‘:’和信息内容构成,可以是一行,较长的也可以多行。域的首行必须“顶头写”;续行则必须以空白字符打头。
下面是邮件头中常见的域及其意义
1)MIME-Version :现在版本号是1.0
2)Content-Description :可读字符串,说明此邮件主体是否是图像、音频或视频
3)Content-Id :邮件的唯一标识符
4)Content-Type :说明邮件主体的数据类型和子类型
5)Content-Transfer-Encoding :传输编码类型
6)Content-Disposition :段体的安排方式


Content-Transfer-Encoding包含的传输类型有:
1)Binary
2)7bit(缺省的编码方式,MIME对这种由ASCII码构成的邮件主体不进行任何转换)
3)8bit
4)X-Token
5)Base64

对于任意的二进制文件,可用base64编码;完整的base64定义可见 RFC1421和RFC2045。编码后的数据比原始数据略长,为原来的4/3。在电子邮件中,根据RFC822邮件格式标准规定,每76个字符,还需要加上一个回车换行。可以估算编 码后数据长度大约为原长的135.1%。

6)Quoted-Printable(适用于所传送的数据中只有少量的非ASCII码)

关于Content-Transfer-Encoding的详细说明可以查看此链接


Content-Type说明必须含有两个标识符,即内容类型(type)和子类型(subtype),中间用‘/’分开。MIME标准定义了7个基本内容类型和15种子类型,如图所示:

MIME的内容类型中的multipart是很有用的,因为它使邮件增加了相当大的灵活性。他们之间的层次关系如图所示(来源):

可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。


boundary

multipart诸类型的共同特征是,在段头指定“boundary”参数字符串,段体内的每个子段以此串定界。所有的子段都以“–”+boundary行开始,父段则以“–”+boundary+“–”行结束。段与段之间也以空行分隔。在邮件体是multipart类型的情况下,邮件体的开始部分(第一个“–”+boundary行之前)可以有一些附加的文本行,相当于注释,解码时应忽略。段间也可以有一些附加的文本行,不会显示出来(MIME协议分析)。

边界参数,它由一个字符集的1至70个字符组成,其规定如下:

boundary := 0*69 bcharsnospace
bchars := bcharsnospace / ” ”
bcharsnospace := DIGIT / ALPHA / “’” / “(” / “)” /
“+” / “_” / “,” / “-” / “.” /
“/” / “:” / “=” / “?”

更多内容查看RFC2046文档

雅虎邮箱发送失败及MIME协议相关推荐

  1. jenkins邮箱发送失败以及解决方案

    2019独角兽企业重金招聘Python工程师标准>>> jenkins邮箱设置报错以及解决方案 Jenkins邮箱设置 我用了 Email Extended Plugin这个插件,这 ...

  2. 网易邮箱发送失败的原因

    1.设置故障,再网易的web界面开启pop3.imap协议即可 一般出现再刚下载还未设置 2.免费信箱故障 解决方法:给自己发邮件,如果没有受到,则免费信箱有问题,去手机店处理即可 3.对方线路问题 ...

  3. 【计算机网络】应用层 : 电子邮件 ( SMTP 协议 | MIME 协议 | POP3 协议 | IMAP 协议 | 基于万维网的电子邮件 )

    文章目录 一.电子邮件信息格式★ 二.电子邮件系统 组成 结构 ★ 三.SMTP 协议 ( 简单邮件传送协议 ) ★ 四.SMTP 协议 连接建立流程 五.SMTP 协议 邮件发送 流程 六.SMTP ...

  4. 解决阿里云企业邮箱发送错误码提示

    阿里云企业邮箱错误代码提示原因及解决方法,阿小云分享阿里云企业邮箱使用过程中报错.错误原因及解决方法: 阿里云企业邮箱报错及解决方法 在使用企业邮箱时如发生相应的报错,可参见以下报错信息进行解决: 本 ...

  5. 腾讯企业邮箱外域邮件发送失败原因及其解决方案

    腾讯企业邮箱外域邮件发送失败原因及其解决方案 参考文章: (1)腾讯企业邮箱外域邮件发送失败原因及其解决方案 (2)https://www.cnblogs.com/chen110xi/p/465067 ...

  6. java 163 授权码_JavaMail使用163,sina邮箱,发送失败

    JavaMail使用163,sina邮箱,发送失败,前几个月还是可用的.同样的代码,没有修改,是不是这些邮箱改了认证措施,pop/smtp设置也都开启了 DEBUG SMTP: connected t ...

  7. CAN接受和发送失败的原因有哪些---之前调试MCP2515驱动时,数据一直发不出去,三个发送邮箱都被占满.至今未解决,读寄存器-总线错误

    0.CAN总线错误分析与解决–讲的最精辟的放在最前面 我们知道CAN总线上的每个节点往总线上发送数据的同时会同时读取总线上的数据,并与自己发送的数据作对比.-CAN仲裁??? CAN总线错误分别有发送 ...

  8. 历史上的今天:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 8 月 19 日,在 139 年前的今天,"时尚女王"Coco Chanel 出 ...

  9. python 实现使用163邮箱发送有图片的邮件

    周末温习下python,正好最近在做监控,想着 给163邮箱发邮件,记录下来,方便备查. 邮件发送必须要知道邮件的 传输协议 SMTP SMTP (Simple Mail Transfer Proct ...

  10. 用python通过139邮箱发送Email

    1.注册139邮箱,在设置中开启邮箱协议设置,如图所示: 2.编写代码.本人在anaconda的jupyter notebook中测试成功.代码如下: # -*- coding: UTF-8 -*- ...

最新文章

  1. GT Transceiver中的重要时钟及其关系(7)TXUSRCLK以及TXUSRCLK2的产生
  2. OSI与TCP/IP协议区别
  3. 锐捷EG易网关远程命令执行漏洞-1
  4. rsync的安装使用01
  5. qt中的纯c语言中项目,2使用QT新建c工程
  6. 线程NEW状态和RUNNABLE状态
  7. 计算机无线局域网毕业论文,谈教学设计《计算机网络》网络课程“无线局域网”单元的设计与开发大专毕业论文范文...
  8. 技巧:在Silverlight中如何访问外部xap文件中UserControl
  9. java响应鼠标滚轮事件_javascript滚动条响应鼠标滑轮的实现上下滚动事件
  10. 【Axure电商原型】电商app高保真原型、移动端通用版电商app模板、用户中心、会员体系、签到、高保真商城app、rp原型、直播、运营活动、订单管理、售后退款、电商系统、购物车、高保真移动端电商
  11. YAML_01 YAML语法和playbook写法
  12. Educational Codeforces Round 39 A Partition
  13. 租房管理系统毕业设计Java_java毕业设计_springboot框架的租房管理系统
  14. 微信小程序中使用icon
  15. 五边形镶嵌计算机程序,如何看待美国数学家发现可无缝密铺平面的五边形?.doc...
  16. 苹果手机识别图片文字方法
  17. jmeter生成接口测试报告
  18. 计算机如何手动新建服务启动项,电脑开机设置怎么设置启动项
  19. 思科C9500交换机介绍及光模块解决方案
  20. 大数据量分页存储过程效率测试附代码(转http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html)...

热门文章

  1. C#开发工控上位机编程 csdn_5种将死的编程语言
  2. 毕业一年后,我为什么选择去香港做IT?
  3. php日程提醒,PHPOA日程安排系统,建立井然有序的工作计划
  4. Unity 3D游戏-塔防类游戏源码:重要方法和功能的实现
  5. 洛谷P【P5708】三角形面积java写法
  6. 点积与向量积(点乘与叉乘)
  7. 分布式存储学习入门(一)
  8. mysql 2000_sql server 2000 下载
  9. ps4 6.72破解测试版+6.72固件下载+可玩游戏汇总+6.72破解教程
  10. 电信网通竞合协议事件升级 内部文件泄露曝裂痕