Как найти адрес электронной почты, на который было переслано письмо (в MimeKit) - PullRequest
0 голосов
/ 04 сентября 2018

У нас есть универсальный адрес электронной почты, и письма пересылаются на [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. ком). Насколько я могу судить, [an-id] @ ourdomain.com нигде не появляется в конверте.

Есть ли способ найти этот адрес электронной почты? (нам нужен идентификатор в основном для маршрутизации).

Или есть другой метод, который я должен использовать для достижения этой цели (перенаправить электронную почту на где-то с идентификатором, который я могу использовать для обработки).

1 Ответ

0 голосов
/ 04 сентября 2018

В письмах есть несколько заголовков с этой информацией: 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"];
            }

Кажется, они содержат адрес электронной почты получателя и решают проблему.

** В настоящее время я не уверен, почему их больше одного или они стандартизированы

...