分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

转载:http://blog.sina.com.cn/s/blog_759444350100vx8u.html

MIME邮件格式

在RFC 2822文档中定义了简单的ASCII编码的Email的邮件格式,然而随着Internet的发展,Email邮件仅仅传输简单的文本已经满足不了用户的需求,为了在Email中传输大量HTML、图像、声音以及各种附件格式,一种新的扩展的邮件格式应运而生——MIME。由于在MIME邮件格式非常复杂,大量的RFC文档中对MIME邮件格式进行了定义与说明,比如RFC2045, RFC2046, RFC2047, RFC2049, RFC2231,RFC2387, RFC4288,RFC4289等。因此,MIME邮件格式为我们提供了极大的灵活性的同时也给我们解读MIME格式的Email邮件带来了极大的困难。以下就一封具体的邮件原始信息对MIME邮件格式作出一个概要的介绍。

解释几个常用且不易理解的Content-Type开头的MIME首部:

Received: from JSJ104(unknown [202.204.96.147])
    by smtp14(Coremail) with SMTP id wKjRDyJAHALkc2lFEtAjAg==.38990S2;
    Sun, 26 Nov2006 19:00:55 +0800 (CST)
Message-ID:<000601c7114a$2fd50450$9360ccca@JSJ104>
From: <ctp_41023@163.com>
To: <ctp_41023@163.com>
Subject:=?gb2312?B?MTIzMTIzxOO6wzEyMzEyMw==?=
Date: Sun, 26 Nov 2006 19:01:04+0800
MIME-Version: 1.0
Content-Type:multipart/alternative;
   boundary="----=_NextPart_000_0003_01C7118D.38E01920"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft OutlookExpress 6.00.2900.2869
X-MimeOLE: Produced ByMicrosoft MimeOLE V6.00.2900.2962

This is a multi-part message in MIME format.

------=_NextPart_000_0003_01C7118D.38E01920
Content-Type: text/plain;
   charset="gb2312"
Content-Transfer-Encoding:base64

MTIzMTIzMTIz

------=_NextPart_000_0003_01C7118D.38E01920
Content-Type: text/html;
   charset="gb2312"
Content-Transfer-Encoding:base64

PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMxMiI+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNi4w
MC4yOTAwLjI5OTUiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj4xMjMxMjMxMjM8L0ZPTlQ+
PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg==

------=_NextPart_000_0003_01C7118D.38E01920--

这封Email具有一个邮件首部,然后是邮件的主体部分,它包括一个文本和一个HTML类型。可以注意到这样一行编码“boundary="----=_NextPart_000_0003_01C7118D.38E01920"”,它是用来隔离MIME邮件的各个实体部分。

在RFC2822中定义了MIME邮件首部的格式:

field-name ":" [ field-body ] CRLF
例如:
MIME-Version: 1.0
Content-Type: multipart/alternative;
Content-Type: text/plain;
Content-Transfer-Encoding: base64

最常见也用途最都的MIME首部是以Content-Type开头的,在RFC2046给出了它的定义,大致与如下内容相似:
Content-Type: text/plain;
Content-Type: text/plain; charset=ISO-8859-1
Content-Type: text/plain; charset=us-ascii
Content-Type: text/plain; charset=utf-8
Content-Type: text/html;
Content-Type: text/html; charset=ISO-8859-1
Content-Type: text/css
Content-Type: image/gif; name=image004.gif
Content-Type: image/jpeg; name="image005.jpg"
Content-Type: message/delivery-status
Content-Type: message/rfc822
Content-Type: audio/x-mpeg
Content-Type: video/mpeg-2
Content-Type: application/msword
Content-Type: application/mspowerpoint
Content-Type: application/zip

Content-Type:multipart/mixed;    boundary="----=_Part_3431_12384933.1139387792352"
Content-Type: multipart/alternative;boundary="----=_Part_4088_29304219.1115463798628"
Content-Type:multipart/related;    boundary="----=_Part_2067_9241611.1139322711488"
Content-Type:multipart/digest;    boundary="----=Next message 15543233913938263541"
Content-Type: multipart/report; report-type=delivery-status;
             boundary="k04G6HJ9025016.1136391237/carbon.singnet.com.sg"
Content-Type: multipart/parallel

1) Content-Type: multipart/mixed
它表明这封Email邮件中包含各种格式的MIME实体但没有具体给出每个实体的类型。

2) Content-Type: multipart/alternative
如果同一封Email邮件既以文本格式又以HTML格式发送,那么要使用Content-Type:multipart/alternative。这两种邮件格式实际上是显示同样的内容但是具有不同的编码。

3) Content-Type: multipart/related
用于在同一封邮件中发送HTML文本和图像或者是其他类似类型。

邮件主体的编码:

主要是包括quoted-printable与base64两种类型的编码。Base64和Quoted-Printable都属于MIME(多用途部分、多媒体电子邮件和WWW 超文本)的一种编码标准,用于传送诸如图形、声音和传真等非文本数据)。
一.Base64
  Base64是现今在互联网上应用最多的一种编码,绝大多数的电子邮件软件头把它作为默认的二进制编码,比如我们常用的Outlook。
Base64内容传输编码被设计用于以人无法可读的方式来表述八位组的任意序列。编码与解码算法很简单,但是编码数据总是比非编码数据长33%。这种编码实际上类似于RFC1421中定义的在增强保密邮件(PEM)应用程序中使用的编码方式。
  编码程序将字符流顺序放入一个 24位的缓冲区,缺字符的地方补零。从左到右,一个24位输入组通过级联3个八位输入组组成。随后这24位截断成为 4 个部分,每个部分 6位,分别被翻译为base64字母表中的一个单独数字。当通过Base64编码一个位流时,位流必须假设为以最高有效位优先的顺序排列。也就是说,流中的第一位将是第一字节中的高端位,而第八位则位第一字节中的低端字节位。
  如果输入数据不足24个字符,即只有一个或两个字节时,则需要经过特殊处理——在数据末尾填充"="字符,这可以隔断附加的信息造成编码的混乱。
在Base64编码数据中,任何在Base64字母表之外的字符将被忽略。Base64编码中的非法字符序列也将被忽略,例如"=====".
二.Quoted-Printable
   Quoted-Printable与Base64一样,常常用在Email系统中。它通常用于少量文本方式的8位字符的编码,例如Foxmail就用它做对主题和信体的编码。这种编码的应该是很好辨认的:它有大量的'='。
  QP的算法非常的简单但是编码效率很低(1:3),它是专门为了处理8位字符制定的。它的算法是:读一个字符,如果ASCII码大于127,即字符的第8位是1的话,进行编码,否则忽略(有时也对7位字符编码)。

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

SMTP邮件格式 SMTP 协议,SMTP的MIME写法,SMTP发送HTML邮件相关推荐

  1. 伪造邮件***,看我如何给网易邮箱APP发送垃圾邮件【二】

    Duang~~~好久没更新博客了,源于最近比较忙,感谢博友对我的支持哈~今天继续更新 后面以我在补天漏洞平台提交过的漏洞为入口. 网易邮箱国内用户很多.今天看见他家的app了 ,99.95%垃圾邮件捕 ...

  2. python向自己qq邮件发信息_python实现自动向QQ邮箱发送天气预报邮件

    今天是清明长假的最后一天了,趁着这点空余的时间想来做点有意思的东西,之前做12306自动购票程序的时候就想加入一个功能,就是抢票成功后实现自动向指定的邮箱里面发送提醒信息的邮件,功能还是很简单的,今天 ...

  3. java怎么发qq邮件_java代码如何发送QQ邮件

    近来想写一个qq之间互相发送邮件的工具.奈何一直报错服务错误: org.apache.commons.mail.EmailException: Sending the email to the fol ...

  4. springboot发送QQ邮件(最简单方式)

    前言:使用邮箱注册时发送邮件获取验证码:找回密码时通过邮箱进行验证:或者其他需要发送邮件的场景. 主要针对在springboot中如何发送QQ邮件 1. 准备工作 进入QQ邮箱页面,点击设置,选择账户 ...

  5. iOS12系统应用发送普通邮件构建邮件

    iOS12系统应用发送普通邮件构建邮件 当确定设备支持邮件发送功能后,开发者就可以实现该功能.根据是否包含附件,邮件可以分为普通邮件和附件邮件两种.本节首先讲解如何发送普通邮件.实现过程如下: 1.构 ...

  6. 如何撤回已发送的邮件?邮件撤回成功后对方还能看到吗

    公司新来的小白给领导的邮件数据弄错了,没有检查就发给来到了,导致给客户的方案错误,差点影响公司业务.小白刚刚检讨完,懊恼不已.既然微信消息可以撤回,**如何撤回已发送的邮件呢?**其实,已发送邮件的确 ...

  7. SMTP邮件格式、SMTP 协议,SMTP的MIME写法,SMTP发送HTML邮件

    转载:http://blog.sina.com.cn/s/blog_759444350100vx8u.html MIME邮件格式 在RFC 2822文档中定义了简单的ASCII编码的Email的邮件格 ...

  8. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

  9. foxmail 怎么把邮件格式默认为html_Python SMTP发送邮件-smtplib模块

    在进入正题之前,我们需要对一些基本内容有所了解:常用的电子邮件协议有SMTP.POP3.IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25.110和143建立连接. Pyt ...

最新文章

  1. Go在区块链的发展和演进
  2. Cisco asa 5510升级IOS和ASDM
  3. Kaggle比赛的进阶技巧和国内比赛前十套路
  4. .NET 2.0 中使用Active Directory 应用程序模式 (ADAM)
  5. 暗黑三使用服务器维护,《暗黑3》本周更新修复内容及维护时间公布
  6. 除了收割票房,内战中的中国喜剧电影到底在拼什么?
  7. mysql 衍生表必须有别名_MySQL“每个派生表必须有自己的别名”
  8. 从马云看“穷男人”如何创业——看后信心倍增!
  9. linux系统更新失败处理功能,Proxmox VE升级apt-get update失败处理 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  10. spring-boot-maven-plugin 插件
  11. [JBoss] JNDI与JBossNS
  12. paip.银联支付接口订单号uuid算法
  13. ssm-学子商城-项目第十三天最后一天完成项目
  14. 通达OA应对后门检测的临时方法
  15. qemu的bridge和nat模式
  16. 转载:分布式Session共享:tomcat+memcached实现session共享
  17. 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新
  18. 4 个 Linux 技巧,你值得拥有
  19. 【React Native】深入理解Native与RN通信原理
  20. TFmini Plus在开源飞控PX4上的应用

热门文章

  1. 【北京理工大学-Python 数据分析-2.1Matplotlib库入门】
  2. 用 create-vue 从 0 到 1 搭建一个后台管理系统
  3. 开发一个二方包,优雅地为系统接入ELK(elasticsearch+logstash+kibana)
  4. ipone低版本页面不渲染问题
  5. 计算机毕设 SpringBoot+Vue在线音乐系统 音乐推荐系统 音乐管理系统 音乐播放管理系统Java Vue MySQL数据库 远程调试 代码讲解
  6. 微信小程序之官方UI框架 iView UI使用教程
  7. 星巴克再携手中国扶贫基金会,启动咖啡产业扶贫二期普洱项目
  8. Python做文本挖掘的情感极性分析(基于情感词典的方法)
  9. java计算机毕业设计影视论坛源码+数据库+系统+lw文档+部署
  10. 持续部署-Spinnaker