Наша организация в настоящее время находится в процессе извлечения старых файлов .MSG, которые были сохранены текущими и, возможно, бывшими сотрудниками.В рамках этого процесса мы пытаемся извлечь SMTP-адрес отправителя из этих старых писем.Однако, поскольку большинство из них были / являются внутренними пользователями, в файле msg адрес отправителя хранится как адрес обмена.Мы безуспешно попробовали следующее:
**
MsgReader.Outlook.Storage.Message
**
var senderAddress = string.Empty;
using (var msg = new Storage.Message(emailFilePath))
{
senderAddress = msg.Sender.Email;
}
**
Microsoft.Office.Interop.Outlook.MailItem
**
var senderEmailAddress = this.SafeExtractEmailAddress(mail.Sender, mail.SenderEmailAddress);
private string SafeExtractEmailAddress(AddressEntry addressEntry, string currentEmail)
{
var userEmailAddress = string.Empty;
if (addressEntry != null &&
(addressEntry.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry
|| addressEntry.AddressEntryUserType == OlAddressEntryUserType.olExchangeRemoteUserAddressEntry))
{
userEmailAddress = addressEntry.GetExchangeUser()?.PrimarySmtpAddress;
}
if (string.IsNullOrWhiteSpace(userEmailAddress))
{
var recipient = this.outlookApplication.Session.CreateRecipient(currentEmail);
var exchangeUser = recipient?.AddressEntry.GetExchangeUser();
userEmailAddress = exchangeUser?.PrimarySmtpAddress ?? currentEmail;
recipient.SafeRelease();
exchangeUser.SafeRelease();
}
return userEmailAddress.ToLowerInvariant();
}
**
Aspose.Email.Mapi.MapiMessage
**
public string ExtractSender(MapiMessage msg)
{
if (msg == null)
{
throw new ArgumentNullException(nameof(msg));
}
var senderEmailAddress = msg.SenderEmailAddress;
ExchangeService exchangeService = this.exchangeServiceFactory.BuildService();
// Create the ResolveNamesType and set the unresolved entry.
if (msg.SenderAddressType == "EX")
{
var resolutionCollection = exchangeService.ResolveName(msg.SenderEmailAddress, ResolveNameSearchLocation.ContactsThenDirectory, true);
var nameResolutions = resolutionCollection.ToList();
if (nameResolutions.Count > 0)
{
var nameResolution = nameResolutions.ElementAt(0);
senderEmailAddress = nameResolution.Mailbox.Address;
}
}
return senderEmailAddress;
}
Какие еще есть варианты для получения этих данных?