添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
健壮的排球  ·  mysql ODBC ...·  1 年前    · 

前段时间查了个雅虎邮箱发送失败的问题,提示“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文档

前段时间查了个雅虎邮箱发送失败的问题,提示“554 Transaction failed : Cannot send message due to possible abuse; please visit http://postmaster.yahoo.com/abuse_smtp.html for more information”去官网和网上搜看了不少帖子,也没有个清晰的头绪,只能认为邮件被当作
文章目录1、ARP 协议 1.1、ARP 协议 的概念1.2、ARP解析案例1.3、3. ARP原理2、SMTP 协议 2.1、SMTP 协议 简介2.2、SMTP 协议 原理2.3、 发送 邮件应用举例3、 MIME 3.1、 MIME 简介3.2、 MIME 信息组成3.3、 MIME 的两种编码方式 1、ARP 协议 1.1、ARP 协议 的概念 ARP(Address Resolution Protocol,地址解析 协议 ),为了获得IP地址对应的网络接口的硬件地址的 协议 。 为什么需要硬件地址? 发送 IP报文时,需要打包到帧中,帧的首部需要
Spring邮件 发送 .png JavaMail 概述 ​ JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。JavaMail 是由 Sun 定义的一套收发电子邮件的 API,它可以方便地执行一些常用的邮件传输,不同的厂商可以提供自己的实现类。但它并没有包含在 JDK 中,而是作为 JavaEE 的一部分。 ​ 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件 协议 ,常见的邮件 协议 包括: SMTP:简单邮件传输 协议 ,用于 发送 电子邮件的传输 协议