Parsing RegEx在纯文本电子邮件消息中查找内嵌图像

Parsing RegEx在纯文本电子邮件消息中查找内嵌图像,parsing,email,plaintext,email-attachments,Parsing,Email,Plaintext,Email Attachments,某些邮件客户端允许发件人将图像直接放在电子邮件正文中(而不是作为传统附件)。当我在应用程序中收到其中一封电子邮件时,我需要能够仅查看消息体text/plain并确定发件人嵌入了内联图像 我正在尝试创建一个正则表达式,以便在文本/纯文本消息正文中查找图像占位符,这样我就可以在我自己的启用HTML的消息版本中将它们替换为标记。(古怪,我知道,但这是要求) 我发现的问题是占位符根据发送邮件的客户端而不同。例如,从MS Outlook发送时,由多个部分组成的邮件的text/plain正文如下所示: Co

某些邮件客户端允许发件人将图像直接放在电子邮件正文中(而不是作为传统附件)。当我在应用程序中收到其中一封电子邮件时,我需要能够仅查看消息体
text/plain
并确定发件人嵌入了内联图像

我正在尝试创建一个正则表达式,以便在
文本/纯文本
消息正文中查找图像占位符,这样我就可以在我自己的启用HTML的消息版本中将它们替换为
标记。(古怪,我知道,但这是要求)

我发现的问题是占位符根据发送邮件的客户端而不同。例如,从MS Outlook发送时,由多个部分组成的邮件的
text/plain
正文如下所示:

Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Check out this image:

[cid:image001.jpg@01CB50D4.769583B0]

Isn't it cool??
Gmail发送的类似消息有点不同:

Content-Type: text/plain; charset=ISO-8859-1

Check out this image:

[image: image001.jpg]

Isn't it cool??
随后是
text/html
正文和
image/jpeg
部分与base64编码的图像

以前有没有人做过这方面的研究,并专门为此编制了一个列表或构建了一个正则表达式

我意识到实现我的目标的一个更可靠的方法是查看消息的
文本/html
部分——从我所做的几个测试来看,这似乎有点标准化了——但不幸的是,在这种情况下,我无法访问它

我用的是C#,如果这对任何人都重要的话

以下是我迄今为止编译的文本/普通图像占位符列表:

  • Gmail:
    [图像:filename.jpg]
  • Outlook 2007:
    [cid:filename。jpg@01CB50D4.769583B0]
  • 雷鸟3.0.7:

    • 我建议使用html部分。如果您只想在纯文本部分中找到占位符,这个非常简单的正则表达式就足够了(PCRE):

      至少这是上面的例子所适用的。如果您想识别图像名称,则需要一个有点复杂的表达式。请注意,这将捕获所有以[和]开头的行,无论内容是什么。如果要将regexp限制为某些文件类型,请尝试以下操作:

      ^\[.*(\.jpg|\.jpeg|\.png|\.gif|\.bmp).*\]$i
      

      示例将在Perl中运行,因为您没有提到语言…

      谢谢!不幸的是,我不能使用HTML部分。我认为在[]中查找图像文件格式是非常安全的。好主意。最大的问题是弄清楚每个客户机都做什么,所以我知道如何构建正则表达式。我希望Gmail包含“cid:”部分。我还将测试更多的电子邮件客户端。嗯,这些“内联”图像不是标准化的,因此无法判断它们在各种客户端中的外观。然而,MIME确实标准化了部分标题,所以您可以从其标题中获取图像名称,然后查找此文本以替换它。您是对的。不幸的是,我只能访问纯文本正文。但我刚刚意识到,我也知道整个文件名,所以我可以通过动态构建并匹配文件名来收紧正则表达式,例如:
      ^\[.*test\.jpg.*]$
      ^\[.*(\.jpg|\.jpeg|\.png|\.gif|\.bmp).*\]$i