在 C# 中使用正则表达式解析电子邮件

本文关键字:电子邮件 正则表达式 | 更新日期: 2023-09-27 17:57:12

我需要在 c# 中使用正则表达式解析电子邮件文件,即解析包含多封电子邮件的电子邮件文件并将其解析为其组成部分,例如 from、to、bcc 等。

用于电子邮件的正则表达式是

"'w+([-+.]'w+)*@'w+([-.]'w+)*'.'w+([-.]'w+)*"

我遇到的问题是收件人,抄送和密件抄送有时包含多个电子邮件,并且发生在多行中

To: Me meagain <me@me.com>,
    Me1 meagain <me1@me.com>,Me3 meagain <me1@me.com>

另外,哪个正则表达式将与消息匹配?

在 C# 中使用正则表达式解析电子邮件

使用正则表达式解析电子邮件是一个糟糕的主意。您可能能够使用正则表达式解析组成部分,但找到具有正则表达式的组成部分将为您提供适合。

当然,正常情况很容易。但是,您会遇到类似消息之类的内容,其中包含嵌入的消息。也就是说,内容包括包含"发件人:"、"收件人:"、密件抄送:"等的完整电子邮件。你天真的正则表达式解析器认为,"哦,男孩!我发现了一条新消息!

你最好阅读和理解互联网消息格式并编写一个真正的解析器,或者使用已经写好的 OpenPop.NET。

另外,请查看在 C# 和 https://stackoverflow.com/questions/26606/free-pop3-net-library 中使用 Pop3 阅读电子邮件中的建议。

您将面临的困难的一个很好的例子是,用于匹配电子邮件地址的正则表达式不足。根据RFC2822的第 3.2.4 节(上面链接),电子邮件地址的"本地部分"允许使用以下字符:

atext = ALPHA / DIGIT / ; Any character except controls,
        "!" / "#" /     ;  SP, and specials.
        "$" / "%" /     ;  Used for atoms
        "&" / "'" /
        "*" / "+" /
        "-" / "/" /
        "=" / "?" /
        "^" / "_" /
        "`" / "{" /
        "|" / "}" /
        "~"

域名可以包含除空格和"''"字符以外的任何 ASCII,并且必须满足某些格式要求。然后是"过时"的东西,虽然已弃用,但仍在使用中。这只是在解析电子邮件地址时。如果你看看可以包含在其他字段中的东西,我想你会同意试图用正则表达式解析它充其量是令人沮丧的。

http://www.codeproject.com/KB/office/reading_an_outlook_msg.aspx

上面的教程将为您提供有关如何从文件系统读取 *.msg 文件的不错想法。如果您考虑使用 System.Net.Mail.MailMessage 对象,则可以获取所有信息,例如:

发送接收者,附件,HTML电子邮件模板,文本电子邮件模板,等。。。

谢谢

我创建了一个名为SigParser的API,它可以为你做到这一点。它将回复链电子邮件分解为多个部分,并处理行拆分的此类问题。你会得到一个很好的电子邮件响应正文数组,如果该数据在回复链标题中,则电子邮件的每个部分都指向谁。