热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

邮件解析引擎FastMail库大功告成!

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

1          概述

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

1.1        术语

RFCRequest For Comments, 请求注解, Internet标准(草案)

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

2          邮件解析库的实现

2.1        实现过程

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

这两个库从2004-6月底开始开发设计至2004-10-10完成,历时3个多月,由于不是全力投入,实际耗时约2个月,由于有JavaMailACESTL库的借鉴,所以设计起来还比较顺利。两个库的代码量约有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-Typemimetype和各个参数。

 

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类型映射类

实现邮件MimeTypeFileType类型的映射表,用于查询

 

MimeUtility

MIME邮件分析工具类

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

 

ParameterList

参数列表类

实现ContentTypeContentDisposition用到的参数列表

 

SystemProperty

系统环境类

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

 

UniqueValue

邮件唯一值生成类

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

 

3.2        类图

r_mime_class.gif

3.3        MimeMessage

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

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

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

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

3.4        MimeMessage类结构图

 r_mimemessage.gif

 
。。。未完待续

4          参考文献

[1]JavaMail 1.2

[2]JavaMailTM API Design Specification Version 1.2

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

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


推荐阅读
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
author-avatar
灰包蛋啦_199
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有