如何查找电子邮件转发到的电子邮件地址(在 MimeKit 中)

Posted

技术标签:

【中文标题】如何查找电子邮件转发到的电子邮件地址(在 MimeKit 中)【英文标题】:How to find the email address an email was forwarded to (in MimeKit) 【发布时间】:2019-02-09 05:15:23 【问题描述】:

我们有一个万能的电子邮件地址,并且正在将电子邮件转发到 [an-id]@ourdomain.com

然后我们在代码中提取这些电子邮件以便处理它们……处理并不重要。

        using (ImapClient client = new ImapClient())
        
            var credentials = new NetworkCredential(settings.Value.Email.User, settings.Value.Email.Password);
            var uri = new Uri("imaps://" + settings.Value.Email.Server);
            client.Connect(uri);
            client.AuthenticationMechanisms.Remove("XOAUTH2");
            client.Authenticate(credentials);
            client.Inbox.Open(FolderAccess.ReadWrite);

            IList<IMessageSummary> messages = null;

            foreach (var message in client.Inbox.Fetch(0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure))
            
                // Processing
            
        

但是,“message.Envelope.To.Mailboxes”包含电子邮件发送到的原始电子邮件地址 (myemail@gmail.com),而不是转发到的电子邮件地址 ([an-id]@ourdomain. com)。据我所知,[an-id]@ourdomain.com 没有出现在信封的任何地方。

有没有办法找到这个电子邮件地址? (我们基本上需要 ID 来进行路由)。

或者我应该使用不同的方法来实现这一点(将电子邮件路由到 某处 并带有我可以用于处理的 ID)。

【问题讨论】:

也许您可以使用 Envelope.InReplyTo (return email-Id) 找到原始电子邮件,然后转到该电子邮件并获取地址。您可以先使用 MessageSummary.IsReply 进行验证。 mimekit.net/docs/html/P_MailKit_Envelope_InReplyTo.htm InReplyTo 为 null 唉 MessageSummary.IsReply 是真的吗?并且 InReplyTo 为空?该方法查找诸如“RE”、“FWD”之类的字符串 IsReply 为假,InReplyTo 为空 - 这不是回复,而是转发(就像在 gmail 中,“将所有电子邮件转发到...”),所以我不认为这是官方的“回复” 【参考方案1】:

电子邮件中有一些标题包含此信息: X-Orig-To 或 X-Forwarded-To

            var fields = new HashSet<string>() "X-Orig-To", "X-Forwarded-To" ;
            foreach (var message in client.Inbox.Fetch(0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure, fields))
            
                  var email = message.Headers["X-Orig-To"];
            

这些似乎包含目标电子邮件地址,并解决了问题。

**我目前不确定为什么会有多个,或者这些是否标准化

【讨论】:

以上是关于如何查找电子邮件转发到的电子邮件地址(在 MimeKit 中)的主要内容,如果未能解决你的问题,请参考以下文章

如何将原始电子邮件 (MIME) 从 AWS SES 转换为 Gmail?

重新发送 MIME 电子邮件中的标头

根据邮箱能追查ip吗

PHP 邮件不在“收件人”标题中显示“收件人”

MIME格式详细介绍

如何在python电子邮件脚本中的发件人地址之前添加发件人姓名