zoukankan      html  css  js  c++  java
  • EML文件(MIME邮件)格式分析

    电子邮件普遍遵循的邮件技术规范。
    MIME邮件由邮件头和邮件体两部分组成。
    邮件头包括:标题,送信人,收信人,创建日期,邮件体内容类型和邮件体编码方式等内容。
    邮件体包括:正文,超文本,内嵌数据和附件等内容。

    MIME技术规范的完整内容由RFC 2045-2049定义,包括了信息格式、媒体类型、编码方式等各方面的内容,本文只介绍其中的一些关键的格式和规范。
    1.域
    MIME邮件中的重要信息都记录在邮件内的各个域中。
    域的基本格式是 {域名}:{内容}。
    一个域占一行或多行,域的首行左侧不能有空白字符,占多行的域其后续行必须以空白字符开头。
    域的信息内容中还可以包含属性,属性之间以“;”分隔,属性格式是{属性名}="{属性值}"。
    域的内容的编码格式是"=?"+编码名称+"?"+B/Q+"?"+编码后的字符序列+"?="。(B代表base64的编码方式,Q代表quoted-printable的编码方式)

    2.Content-Type域
    Content-Type域定义了邮件中各种内容的形式及属性。
    Content-Type域的基本格式是 Content-Type:{主类型}/{子类型}。
    Content-Type的主类型分text,image,audio,video和application五种离散类型以及multiple和message两种复合类型。
    text类型有plain和html两种常用的子类型。
    multiple类型有mixed,alternative和related三种常用的子类型。

    3.multiple类型
    ·multiple类型基本格式
    multiple类型基本格式是 Content-Type: multipart/{子类型};boundary="{分段标识}"
    三种子类型的对比:
    ------------------------------------------------------------------
    |类型名              |邮件种类  |boundary作用                    |
    ------------------------------------------------------------------
    |multiple/mixed      |有附件    |分隔各附件内容和邮件其他内容    |
    ------------------------------------------------------------------
    |multiple/alternative|有超文本  |分隔纯文本,超文本和邮件其他内容|
    ------------------------------------------------------------------
    |multiple/related    |有内嵌资源|分隔各内嵌资源和邮件其他内容    |
    ------------------------------------------------------------------
    ·boundary属性
    multiple子类型中都定义了各自的boundary属性,邮件中使用boundary中定义的字符串作为标识,将邮件内容分成不同的段,段内每个字段以"--"+boundary中定义的字符串开始,父段则以"--"+boundary中定义的字符串+"--"结束,不同段之间用空行分隔。
    ·multiple类型的层次关系
    ------------------------------
    |multiple/mixed              |
    ------------------------------
    | |multiple/related        | |
    ------------------------------
    | | |multiple/alternative| | |
    ------------------------------
    | | |纯文本正文          | | |
    ------------------------------
    | | |超文本正文          | | |
    ------------------------------
    | |内嵌资源                | |
    ------------------------------
    |附件                        |
    ------------------------------

    4.Content-Transfer-Encoding域
    Content-Transfer-Encoding域定义段内文字的编码方式,不同段可以有不同的编码方式。
    MIME邮件中的数据编码普遍采用base64和quoted-printable两种编码。
    ·base64编码的算法
    编码的原则是将输入数据全部转换成由{'A'-'Z','a'-'z','0'-'9','+','/'}64个ASCII字符组成的字符序列。
    编码时将需要转换的数据每次取出6bit,然后转换成十进制数字,查询64个ASCII字符组成的字典表,输出对应位置的ASCII码字符。每3个字节的数据内容会被转换成4个字典中的ASCII码字符。当转换后的数据不是4的整倍数时,用"="来填充。
    ·quoted-printable编码的算法
    编码的原则是将输入的数据转换成可打印的ASCII码字符。
    编码时根据读入内容来决定是否进行编码,如果读入的字节处于33-60,62-126范围内,属可直接打印的ASCII字符,则直接输出,否则将该字节分为两个4bit,每个用一个十六进制数来表示,然后再前面加上"=",每个需要编码的字节被转换成三个字符来表示。

    转载于:http://hankundev.blog.sohu.com/104046669.html

  • 相关阅读:
    javascript学习笔记
    c++输入文件流ifstream用法详解
    如何退出while(cin >> s)
    【赵渝强老师】利用Python完成数据分布特征的分析
    PG 的 AWR pg_profile
    java构建树形结构
    docker安装mongodb 数据备份和还原
    通过经纬度计算不同模型图瓦片坐标
    linux常用命令
    docker 常用命令
  • 原文地址:https://www.cnblogs.com/czx1/p/9546791.html
Copyright © 2011-2022 走看看