1          概述

邮件解析库API完全使用面向对象技术设计,使用C++语言开发的用于邮件解析和组装的库。它提供了一些类用来解析和组装Internet邮件,如MimeMessage和MimeBodyPart,用于Internet邮件协议实现并且遵循RFC822和RFC2045规范。这些API库用于应用程序的开发。

1.1        术语

RFC:Request For Comments, 请求注解, Internet标准(草案)

MIME:Multipurpose Internet Mail Extension protocol, 多用途的网际邮件扩充协议

2          邮件解析库的实现

2.1        实现过程

本邮件解析库(FastMail)参考JavaMail的结构设计,有与之类似的接口和类。本解析库用到基础库Fast库参考ACE库和STL、Java Framework库设计,包含一些字符串处理和容器的类。设计它们的目的是为了简化库的接口,并且尽量与Java库的接口兼容,同时使用完全标准的C++特性,使库更易维护更稳固。

这两个库从2004-6月底开始开发设计至 2004-10-10 完成,历时3个多月,由于不是全力投入,实际耗时约2个月,由于有JavaMail、ACE和STL库的借鉴,所以设计起来还比较顺利。两个库的代码量约有32000行代码。类设计合理并且提供丰富的接口供二次开发和改造。

下面是两个库的文件列表以及邮件解析库的类的介绍(Fast库另有文档专门介绍):

2.2        文件列表

FAST基础库

comm./

comm./FastArray.h               数组类

comm./FastAutoPtr.h            自动管理指针类

comm./FastBase.h                FAST库公共定义,包含一个完整的内存分配器类

comm./FastHashMap.h         HashMap容器类

comm./FastMap.h                Map容器类

comm./FastString.h                     FastString字符串处理类

comm./FastVector.h                     Vector容器类

邮件解析引擎FastMail库

mime/

mime/CharsetUtils.cpp          字符串编码和解码工具

mime/CharsetUtils.h

mime/MimeActivation.cpp     邮件解析初始化工具

mime/MimeActivation.h

mime/MimeBase.h                邮件解析公共定义

mime/MimeContainer.cpp      邮件解析Multipart容器

mime/MimeContainer.h

mime/MimeEntity.cpp           邮件解析MIME实体类

mime/MimeEntity.h

mime/MimeMessage.cpp       邮件解析MIME邮件类

mime/MimeMessage.h

mime/MimeObject.cpp          邮件解析MIME对象类

mime/MimeObject.h

mime/MimeParser.cpp          邮件解析工具类

mime/MimeParser.h

mime/MimeUtility.cpp           邮件解析工具类

mime/MimeUtility.h

3          邮件解析库的类

3.1        类的实现

邮件解析库包含一系列的类,主要有MimeMessage(邮件实现类)、MimeBodyPart(邮件正文段体类)、MimeMultipart(邮件多部段体类)、InternetHeaders(邮件头类)、InternetAddress(邮件地址类)和ContentType(段体类型类)等。解析和组装邮件主要使用这些类进行组装和分解。

下面是所有的类的说明:

类名

名称

说明

基类

ContentDisposition

MIME邮件头

实现MIME邮件头的ContentDisposition

ContentID

MIME邮件头

实现MIME邮件头的ContentID

ContentType

MIME邮件头

实现MIME邮件头的ContentType

MimeType

MIME类型类

实现MIME的类型,记录在ContentType里,如text/plain

ConverterFactory

编码转换工厂类

用于创建编码转换对象

ICodeConverter

编码转换接口类

Base64Converter

BASE64编码类

BASE64的编码和解码

ICodeConverter

QPConverter

QP编码类

Quote-Printable的编码和解码

ICodeConverter

hdr

MIME邮件头类

实现MIME邮件头HEADER行

HeaderTokenizer

邮件头分解类

实现分解MIME邮件头的各元素,如Content-Type的mimetype和各个参数。

IMimePart

MIME邮件段体接口类

邮件段体类的基类

MimeBodyPart

MIME邮件段体类

实现MIME邮件各个段体的类

IMimePart

MimeMessage

MIME邮件类

MIME邮件主类

IMimePart

IMultipart

多部分接口类

多部分类的基类

MimeMultipart

多部分实现类

保存段体类对象的多部分容器类

IMultipart

InternetAddress

MIME邮件地址类

实现MIME邮件地址的类

InternetHeaders

MIME邮件头部分类

实现保存MIME各邮件头的容器类

MailDateFormat

邮件时间转换类

实现MIME邮件的格式的时间转换

MailDateParser

时间分解处理类

实现MIME邮件格式的时间的分解

MimeInitialization

邮件解析全局初始化类

实现初始化MIME邮件用到的各个全局变量

MimetypesFileTypeMap

邮件Mime类型映射类

实现邮件MimeType和FileType类型的映射表,用于查询

MimeUtility

MIME邮件分析工具类

实现邮件解析用到的各个解析工具函数

ParameterList

参数列表类

实现ContentType和ContentDisposition用到的参数列表

SystemProperty

系统环境类

实现读取系统环境参数的方法

UniqueValue

邮件唯一值生成类

实现生成MIME邮件用到的唯一值的类,如boundary等

3.2        类图

3.3        MimeMessage类

现在介绍一下最主要的也是提供主要的调用接口API的类MimeMessage。

MimeMessage提供了一系列的方法供调用者使用,如定义了获取地址信息和获取邮件正文内容的结构(可以为具体的数据也可以为一个MimeMultipart对象),用来实现RFC822和MIME规范。

一个MimeMessage对象里保存了一个邮件内容数据(Content),以及一些记录特定的邮件地址信息(如发件人(Sender)和收件人(recipients))的属性(InternetHeaders)。还有关于这封邮件的结构信息(structural information),以及它的邮件主体(body)的段体类型(Content-Type)。

下面用图来描述一个MimeMessage对象内部可能的结构:

3.4        MimeMessage类结构图

。。。未完待续

4          参考文献

[1]《JavaMail 1.2》

[2]《JavaMailTM API Design Specification Version 1.2》

[3]《C++网络编程 卷1:运用ACE和模式消除复杂性》

[4] http://www.faqs.org/rfcs/

邮件解析引擎FastMail库大功告成!相关推荐

  1. 邮件解析引擎FastMail库使用

    1          概述 邮件解析库API完全使用面向对象技术设计,使用C++语言开发的用于邮件解析和组装的库.它提供了一些类用来解析和组装Internet邮件,如MimeMessage和MimeB ...

  2. 几行 Python 代码实现邮件解析,超赞~

    作者 | Yunlor 来源 | CSDN博客 前言 如何通过python实现邮件解析?邮件的格式十分复杂,主要是mime协议,本文主要是从实现出发,具体原理可以自行研究. 一.安装 通过mailgu ...

  3. python几行代码实现邮件解析

    前言 如何通过python实现邮件解析?邮件的格式十分复杂,主要是mime协议,本文主要是从实现出发,具体原理可以自行研究. 一.安装 通过mailgun开源的Flanker库实现邮件解析.该库包含了 ...

  4. 基于 Roslyn 实现一个简单的条件解析引擎

    基于 Roslyn 实现一个简单的条件解析引擎 Intro 最近在做一个勋章的服务,我们想定义一些勋章的获取条件,满足条件之后就给用户颁发一个勋章,定义条件的时候会定义需要哪些参数,参数的类型,获取勋 ...

  5. 2021-09-11 consolidate 模板引擎整合库,Node.js 中 __dirname 和 ./ 的区别

    consolidate 模板引擎整合库[适配] npm install consolidate 在工作路径的views目录下,新建1.ejs <!DOCTYPE html> <htm ...

  6. 赛高文字游戏解析引擎实现

    赛高文字游戏解析引擎实现 一.结构组成 TGEngine 的工程目录结构如下: 其中: Base 存放 TGEngine 共用的头文件 Models 存放游戏内容的相关 Model ,分为 DSL, ...

  7. sdcms的模板解析引擎,一个非常简单和实用的CMS

    代码 <% '============================== 'SDCMS模板解析引擎 'Author:IT平民 'Date:2009年4-5月 '================ ...

  8. CowNew开源-sql解析引擎和cownewsql阶段成果汇报

    很多关心CowNew的朋友纷纷给我发email或者qq留言,说看到最近CowNew开源项目没有动静了,问我是不是虎头蛇尾死掉了.谢谢大家的关心,CowNew没有停止进步的步伐,最近一段时间没有动静是因 ...

  9. boost::program_options模块一个配置ini文件被解析程序选项库,它包括许多不同的值类型的测试程序

    boost::program_options模块一个配置ini文件被解析程序选项库,它包括许多不同的值类型的测试程序 实现功能 C++实现代码 实现功能 boost::program_options模 ...

最新文章

  1. ASP.NET页面之间传值的方式之QueryString(个人整理)
  2. Ubuntu14.04 x64 zabbix 3.0 安装
  3. 智能车竞赛技术报告 | 智能车视觉 - 太原工业学院 - 晋速-轩辕星
  4. python爬虫工程师-Python-爬虫工程师-面试总结
  5. excel另存为没有dbf_PDF转Excel怎么做的?节省工作时间,你要学会的办公技巧
  6. 分布式 RPC架构简单理解
  7. MST(最小生成树)的构造
  8. 服务器建网站www无法访问,IIS6服务器搭建网站无法访问解决方案总结_DOIT.com.cn...
  9. 华为浏览器:即日起全面清理违规信息 严管“自媒体”账号
  10. 多模态之ViLBERT:双流网络,各自为王
  11. 纯java程序jdbcjar包放在哪_oracle 11g jdbc jar包在哪个文件目录
  12. Java 13 发布进入倒计时!
  13. Linux下安装和卸载jdk步骤详述
  14. SQL Server常用数据类型
  15. java ssm网上超市购物管理系统
  16. 海康VisionMaster-脚本模块
  17. ShinyApp中的表格:第三天笔记
  18. oracle lms进程 内存,lms进程耗用大量内存
  19. 2016【淘宝运营】,如何营销宝贝详情页,提高宝贝的转化率
  20. 德勤oracle offer,会计工作:刚刚拿到德勤 Offer,和大家分享一下

热门文章

  1. 电视剧《奋斗》精彩对白节选---(一)
  2. python writeline_Python文件写入函数 write()和writelines()
  3. 安卓面试宝典,2021最新Android知识体系总结,面试资料分享
  4. Python len() 函数
  5. 山西3件国宝春节期间亮相《国家宝藏》
  6. Android视频录制,保存图片,视频到本地后本地相册或者视频库里面没有的解决方案
  7. 给没有软件测试经验的应届生的建议,看完让你豁然开朗!
  8. SOLIDWORKS如何实现放样折弯
  9. window突然没声音.无法启动window audio.无法播放测试音调
  10. 微信小程序不能使用本地图片当背景图片的解决方法