电子邮件解析系统

时间:2009-07-29 23:26:49

标签: php regex email parsing

我正在构建一个系统,用于自动解析传入的电子邮件并从中填充数据库

最初只会有10-20种预期格式,但长期存在数千种不同格式的可能性

我看待它的方式

  1. 我需要识别电子邮件的格式(例如主题行上的正则表达式)
  2. 使用正确的处理器解析电子邮件
  3. 检查数据是否切合实际,可能会标记一些用于手动检查
  4. 填充数据库
  5. 我所追求的是如何构建这个的建议,例如我将格式存储在数据库或平面文件中,系统需要灵活,可能是主题行检测不够而且我可能也有扫描电子邮件标题。

    数据本身可以在电子邮件正文或附件中,例如pdf,excel文件等

    这类事情的一个主要例子是picasa照片库,您可以将照片通过电子邮件发送到特定的电子邮件地址,并自动提取并将其放入图库

3 个答案:

答案 0 :(得分:2)

可能不是最着名的答案,但你看看标准的方法,比如procmail吗?为您提供对电子邮件的基本了解,并允许您围绕所有内容构建过滤器。 (首先通过文件类型检测器处理邮件,将regexp应用于所有可能的标头,...)

通过这种方式,您可以将系统的每个部分保存在专门的脚本/程序中,并生成可轻松扩展的模块化解决方案。另外,您可以使用任何已经由其他人编程的工具。

对于文件类型过滤器:我正在通过procmail为破损/旧pgp邮件做类似的事情来添加内容类型。

# repair pgp-encoded messages with missing Content-Type
######################################################################

:0
* !^Content-Type: message/
* !^Content-Type: multipart/
* !^Content-Type: application/pgp
{
   :0 fBw
   * ^-----BEGIN PGP MESSAGE-----
   * ^-----END PGP MESSAGE-----
   | /usr/bin/formail \
       -i "Content-Type: application/pgp; format=text; x-action=encrypt"

   :0 fBw
   * ^-----BEGIN PGP SIGNED MESSAGE-----
   * ^-----BEGIN PGP SIGNATURE-----
   * ^-----END PGP SIGNATURE-----
   | /usr/bin/formail \
       -i "Content-Type: application/pgp; format=text; x-action=sign"
}

然后,进一步处理可以匹配内容类型,并为特殊类型(以及未知类型的通用处理程序)分配特殊处理程序。

答案 1 :(得分:0)

您可能要做的是首先解析标题和主题行,然后通过数据库导入正确的格式。因为可能存在数千种格式,所以数据库将是最简单的方式,因为它是动态的。无需创建数千个文件。

答案 2 :(得分:0)

使用PHPMailer库。