`
dengbaoleng
  • 浏览: 1189728 次
文章分类
社区版块
存档分类
最新评论

SMTP邮件格式、SMTP 协议,SMTP的MIME写法,SMTP发送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 Nov 2006 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 Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft 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位字符编码)。

分享到:
评论

相关推荐

    Java Socket 实现SMTP邮件发送,支持SSL/TSL

    2. **SMTP协议**:SMTP规定了邮件发送的格式和步骤,包括建立连接、身份验证、提交邮件等操作。在Java中,通常需要自定义SMTP通信的逻辑,例如使用`OutputStream`发送SMTP命令,处理服务器的响应。 3. **SMTP认证**...

    易语言SMTP邮件发送

    易语言SMTP邮件发送是一种在编程中利用SMTP(Simple Mail Transfer Protocol)协议实现电子邮件发送的方法,主要应用于易语言编程环境中。SMTP是互联网上用于传输电子邮件的标准协议,它允许用户通过一个服务器将...

    易语言SMTP邮件发送源码

    易语言SMTP邮件发送源码是基于易语言编程环境开发...在实际应用中,可能还需要考虑邮件附件、多收件人、HTML格式邮件等高级特性。对于初学者来说,理解并掌握这些源码将有助于提升在网络通信和邮件处理方面的编程技能。

    基于smtp的邮件发送程序的设计与实现

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议,它定义了邮件服务器之间交换邮件的格式和过程。在“基于SMTP的邮件发送程序的设计与实现”中,我们将探讨如何利用SMTP协议来构建一个...

    smtp邮件发送程序

    SMTP(Simple Mail Transfer Protocol)邮件发送程序是一种基于TCP/IP协议的网络通信协议,主要用于在互联网上发送电子邮件。这个资源可能是为了帮助用户理解SMTP的工作原理,以及如何通过编程实现邮件发送功能。...

    基于SMTP邮件发送客户端

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议,它定义了如何在邮件服务器之间传输邮件。基于SMTP的邮件发送客户端是实现这一功能的应用程序,允许用户通过网络发送电子邮件。下面将...

    smtp.rar_SMTP邮件_smtp_smtp 服务器_发送邮件

    标签中的"smtp邮件"和"smtp服务器"是指通过SMTP协议发送的电子邮件以及提供此服务的服务器。"发送邮件"则是指使用SMTP协议向其他用户发送电子邮件的过程。 综上所述,SMTP是电子邮件的核心传输机制,它允许用户通过...

    一个带身份验证的smtp邮件发送程序.rar_SMTP 类_smtp_发送邮件_邮件发送_邮件发送程序

    总的来说,这个程序提供了一个方便的工具,使得开发者能够在C++环境中安全地通过SMTP协议发送邮件,尤其适合需要身份验证的场景。了解并掌握SMTP类的设计和工作原理,对于开发类似应用或者理解电子邮件系统的工作...

    基于smtp协议的邮件发送程序

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议。通过SMTP,用户可以将邮件从一个邮件服务器传输到另一个邮件服务器,进而实现邮件的发送。在这个基于SMTP协议的邮件发送程序中,我们...

    SMTP&POP3协议详细&MIME规范

    该压缩包包含三个文档,分别是SMTP协议详解,POP3协议详解,MIME规范详解,文档中详细介绍了一个邮件发送和接收的过程分析,协议本身的包含的命令和工作过程,为开发邮件代理的客户端提供技术基础。如下是部分SMTP...

    smtp发送邮件源码例子

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议。这个标题“smtp发送邮件源码例子”表明我们将探讨如何使用SMTP协议通过编程方式发送邮件。SMTP通常与邮件服务器一起工作,例如Google...

    SMTP邮件发送程序

    SMTP(Simple Mail Transfer Protocol)邮件发送程序是一种基于TCP/IP协议栈的应用程序,用于在互联网上发送电子邮件。在本文中,我们将深入探讨SMTP的工作原理、C++编程中的SMTP邮件实现、Base64编码以及如何处理...

    smtp mime格式发送邮件可发附件

    首先需要连接邮件服务器 这里用socket 邮件服务器端口 25 //2.现在就是和服务器对话了 //3.结束 #include #include #include #include #include #include #include #include #include #include #include ...

    易语言源码易语言SMTP邮件发送源码.rar

    通过分析这个源码,开发者可以了解到如何在易语言环境中使用网络通信功能来实现邮件发送,同时学习到SMTP协议的基本原理和易语言的网络编程技巧。这对于进行自动化报告、通知发送等应用场景非常有用。 在实际开发中...

    C语言实现基于SMTP协议发送邮件.zip

    在这个“C语言实现基于SMTP协议发送邮件”的课程设计中,我们将探讨如何利用C语言来实现电子邮件的发送功能,这涉及到网络通信和协议的理解。 SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的...

    使用libcurl发送邮件实例,实现smtp/smtp方式,基于VS C++

    SMTP是一种用于发送电子邮件的标准互联网协议,它定义了客户端(邮件发送程序)与服务器(邮件接收系统)之间的交互过程。在SMTP中,发送方通过一系列命令与接收方建立连接、验证身份、发送邮件内容并最终关闭连接。...

    SMTP发送邮件 SSL

    在实现SMTP发送邮件时,必须正确处理MIME编码,将附件转换为适合在网络上传输的格式,并在邮件头部添加适当的MIME类型信息。 支持跨平台的SMTP邮件发送程序意味着代码可以运行在不同的操作系统上,如Windows、Linux...

    基于SMTP的邮件收发系统

    SMTP(Simple Mail Transfer Protocol)是互联网上用于在邮件服务器之间传输电子邮件的标准协议。基于SMTP的邮件收发系统设计是一个常见的网络编程课题,旨在理解和实现电子邮件的工作流程。在本项目中,我们将探讨...

    smtp邮件发送器源码

    SMTP(Simple Mail Transfer Protocol)邮件发送器是一种使用C++编程语言实现的应用程序,它能够根据SMTP协议发送电子邮件,包括正文内容以及附件。SMTP是互联网上用于传输电子邮件的标准协议,允许用户通过邮件...

    邮件协议(SMTP&POP3&MIME)详解

    SMTP使得程序能够发送邮件,POP3允许用户从服务器上下载邮件,而MIME则使得邮件内容可以包含各种格式的数据。理解这些协议的工作原理和交互方式,有助于构建高效、功能完善的邮件系统。例如,在设计客户端时,需要...

Global site tag (gtag.js) - Google Analytics