Извлечение контактной информации из контактной группы Outlook, доступной в виде файла * .msg

Я пытаюсь решить проблему, из-за которой у меня есть контактная информация в виде файлов Outlook * .msg. Я хочу проанализировать эти файлы с помощью сценария для извлечения контактных адресов электронной почты и имен. Я попробовал несколько решений:

  • Я попытался использовать почтовую библиотеку Aspose, но не смог найти контактную информацию.
  • Если я открою файл .msg в Outlook и сохраню его как файл .txt, получится простой текстовый файл с указанной контактной информацией, и этот файл я может анализировать с помощью библиотек ввода-вывода и извлекать информацию. Однако у меня более сотни таких файлов .msg. Я использую .NET и не могу понять, как реализовать текст «Сохранить как», что мне удалось сделать вручную.

Есть предложения, как это сделать?

Спасибо

Суреш


person skoppisetti    schedule 04.02.2016    source источник


Ответы (3)


Если можно использовать Redemption, должно работать что-то вроде следующего:

Redemption.RDOSession session = new Redemption.RDOSession();
Redemption.RDOMail msg = session.GetMessageFromMsgFile(@"c:\temp\TestContact.msg");
//is it really a contact? Could be a regular message or an RDODistListItem (all derived from RDOMail)
Redemption.RDOContactItem contact = msg as Redemption.RDOContactItem; 
if (contact != null)
{
  MessageBox.Show(contact.FirstName);
}
else 
{
   Redemption.RDODistListItem dl= msg as Redemption.RDODistListItem; 
   if (dl != null)
   {
      MessageBox.Show(dl.FileAs);
    }
}
person Dmitry Streblechenko    schedule 04.02.2016
comment
@Dimitry, спасибо, что нашли время. Я начал играть с Redemption по твоему совету. Я могу создать объект RDOMail, но приведение RDOContact действительно имеет значение null. Я заглянул внутрь объекта msg и обнаружил свойство под названием Members, которое показывает счетчик 2, который может быть счетчиком контактов в этом файле, поскольку я знаю, что в тестовом файле есть 2 контакта. с использованием. Тип показывает System.__ComObject, знаете ли вы, как читать эту информацию, поскольку я никогда не работал с COM-взаимодействием. - person skoppisetti; 04.02.2016
comment
Это список рассылки? Попробуйте выполнить приведение к объекту RDODistListItem (см. Обновленный код выше) - person Dmitry Streblechenko; 04.02.2016
comment
Это действительно RDODistListItem. Теперь я могу получить перечисление коллекции Members, состоящей из RDOAddressEntry объектов. Хотя я получил Name от этого объекта, адрес электронной почты все еще неуловим. Есть свойство SMTPAddress, но по какой-то причине это не тот адрес, который я вижу, когда открываю файл в Outlook. В любом случае, думаю, я немного ближе к решению. - person skoppisetti; 04.02.2016
comment
Что вы видите в Outlook? Имейте в виду, что DL хранит обоих участников с их внешними идентификаторами записи (например, глобальный список адресов или контакт) в коллекции участников, а также одноразовые адреса (OneOffMembers) на случай, если внешняя запись будет удалена (например, когда вы удаляете контакт, который участник связан с). - person Dmitry Streblechenko; 04.02.2016
comment
Доменная часть адресов электронной почты отличается. - person skoppisetti; 04.02.2016
comment
И в коллекциях Members, и в OneOffMembers? - person Dmitry Streblechenko; 04.02.2016
comment
@Dimitry Большое спасибо. В коллекции OneOffMembers были нужные мне детали. Вот полный код, если кому-то понадобится в будущем: - person skoppisetti; 05.02.2016

Мы очень сожалеем, что обратились к вам с некоторым опозданием.

С какой актуальной проблемой вы сталкиваетесь при использовании Aspose API? API предоставляет возможность читать файлы .MSG Outlook Contact, а также списки рассылки без необходимости установки MS Outlook. Ознакомьтесь со следующими статьями документации:

Если вы по-прежнему сталкиваетесь с проблемой при получении желаемой информации с помощью последней версии API, вы можете опубликовать свой запрос вместе с образцами файлов MSG по адресу Aspose.Email forum. Мы рассмотрим их со своей стороны и поможем вам в дальнейшем.

Я работаю с Aspose как евангелист разработчиков.

person Kashif Iqbal    schedule 10.02.2016

Используя Apose.Email API, мы можем извлечь контактную информацию электронной почты. Вы можете попробовать это со своей стороны. Я устал от этого и смог извлечь эту информацию

        MapiMessage message = MapiMessage.FromFile(msgPath);
        MapiPropertyCollection properties = message.NamedProperties;

        foreach (KeyValuePair<long, MapiProperty> prop in properties)
        {
            if (((prop.Value).Descriptor).CanonicalName != null)
            {
                if (((prop.Value).Descriptor).CanonicalName == "PidLidEmail1DisplayName")
                {
                    string email1displayName = prop.Value.ToString();                     
                }
                if (((prop.Value).Descriptor).CanonicalName == "PidLidEmail1EmailAddress")
                {
                    string email1Address = prop.Value.ToString();
                }
                if (((prop.Value).Descriptor).CanonicalName == "PidLidInstantMessagingAddress")
                {
                    string ADD = prop.Value.ToString();
                }
            }
person Alisha Sharma Chapai    schedule 20.11.2019