使用c#中的正则表达式解析电子邮件

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

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

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

我遇到的问题是To,Cc和Bcc有时包含多个电子邮件,并且出现在多行中

 To: Me meagain , Me1 meagain ,Me3 meagain  

此外,哪个正则表达式将匹配该消息?

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

当然,正常情况非常简单。 但是,您会遇到类似于其中包含嵌入式消息的消息。 也就是说,内容包括一个完整的电子邮件消息,包含From:,To:,Bcc:等等。你的天真正则表达式解析器认为,“哦,男孩!我发现了一条新消息!”

你最好阅读和理解Internet消息格式 ,编写一个真正的解析器,或者使用像OpenPop.NET这样的东西 。

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

您将面临的一个很好的例子就是您的匹配电子邮件地址的正则表达式不够充分。 根据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,它可以帮到你。 它将回复链电子邮件分解为各自的部分,并处理线路分裂的各种问题。 如果该数据位于回复链标题中,您将收到一组很好的电子邮件回复正文,其中包含电子邮件的每个部分。