Последовательно извлекать адреса электронной почты “Из” разных версий Outlook

StackOverflow https://stackoverflow.com/questions/112227

  •  02-07-2019
  •  | 
  •  

Вопрос

Я работаю над автономным настольным приложением на c #, которое отправляет документы, а затем импортирует их из Outlook, когда они отправляются обратно.Приложение получает электронные письма из указанной папки, обрабатывает их, а затем сохраняет имя отправителя и другие данные в базе данных.

Это хорошо работает для Outlook 2003 и 2007, который имеет свойство SenderEmailAddress .Однако Outlook 2000 и XP не обладают этим свойством и не будут постоянно возвращаться name@domain.com.Я обеспечиваю поддержку этих версий.

Я обнаружил, что библиотека под названием Outlook Redemption решит эту проблему, но я разрабатываю в .net и действительно хочу избежать записи в реестры клиентов.Я также нашел MAPI33 - .Net-оболочку вокруг MAPI, но на форумах неясно, поддерживается ли она по-прежнему.

Был бы признателен за любые указания относительно .Сетевой альтернативы библиотеке DLL Redemption или подхода к возможности последовательного получения адреса электронной почты в разных версиях Outlook.

Большое спасибо

АбсФабы

Эпилог: В итоге я использовал решение из этой статьи http://support.microsoft.com/kb/324530.Он включал в себя создание ответа, а затем извлечение ответа на адрес созданного почтового элемента.Он хорошо работал с электронными письмами, отправляемыми через Интернет, и в настоящее время проходит тестирование Exchange Server.

Тоже нашел это во время своих путешествий http://anoriginalidea.wordpress.com/2008/01/11/getting-the-smtp-email-address-of-an-exchange-sender-of-a-mailitem-from-outlook-in-vbnet-vsto/ похоже, это связано с прикосновением.Это может составлять мой план Б, если моя существующая реализация не выдержит тестирования.

Спасибо за ваш отзыв

АбсФабы

В конце концов я решил использовать Redemption.Отличный инструмент для этой работы.Моя проблема заключалась в необходимости зарегистрировать библиотеку dll при установке моего приложения.Поскольку мое приложение написано в dotnet, ему не нужно ничего регистрировать.Я смог обойти проблему с регистрацией dll, используя COM без реестра.

Большое спасибо за ваше вдохновение.

Это было полезно?

Решение

Я использую решение Outlook Redemption в производственном коде C #.Это прекрасно работает.С его помощью вы можете получить идентификатор отправителя почтового сообщения (IRDOMail), и оттуда вы можете использовать метод GetAddressEntryFromID() объекта IRDOSession.

Другие советы

Столкнувшись с аналогичной проблемой на работе, мы решили пойти по пути netMAPI, что вызвало некоторые проблемы.

Основная проблема заключается в том, что MAPI управляет своей собственной памятью, как и .NET, что означает, что иногда (у нас около 300 человек, использующих наше собственное программное обеспечение) это приводило к сбою нашего приложения, генерируя диалоговое окно Windows "сообщить об ошибке", а не наше собственное диалоговое окно отслеживания ошибок.Это было вызвано тем, что они перезаписали друг другу кучи памяти.

Поскольку нам приходится использовать сервер exchange, мы провели некоторое исследование и обнаружили, что если вы напишете код MAPI в приложении VB6, у него будет свое собственное пространство памяти, и, следовательно, он не будет перезаписываться .ЧИСТАЯ куча.

Это довольно затянутый способ ведения дел, но до сих пор у нас не возникало никаких проблем, и наши сотрудники ежедневно получают сотни (если не тысячи) электронных писем.

Хорошей новостью является то, что подразделения находятся на правильном пути, отыскивая нужные интерфейсы.Плохая новость заключается в том, что 2000 и XP очень плохо поддерживаются в .NET, потому что они появились раньше .NET, и только с 2003 года была предпринята реальная попытка заставить COM работать в .NET.

Ваше решение для этих версий 2000 и XP будет состоять в том, что вы отследите нужные COM-интерфейсы и самостоятельно их создадите.Мне приходилось делать это много раз для этих версий Outlook, и это никогда не было красиво.Так что удачи.

Redemption можно использовать без установки его в реестр - вы можете использовать Загрузчик RedemptionLoader на C#, VB.Net, Delphi и C++.

//tell the app where the 32 and 64 bit dlls are located
//by default, they are assumed to be in the same folder as the current assembly and be named 
//Redemption.dll and Redemption64.dll.  
//In that case, you do not need to set the two properties below
RedemptionLoader.DllLocation64Bit = @"c:\SourceCode\Redemption\redemption64.dll";
RedemptionLoader.DllLocation32Bit = @"c:\SourceCode\Redemption\redemption.dll";
//Create a Redemption object and use it
RDOSession session =  RedemptionLoader.new_RDOSession();
session.Logon(Missing.Value, Missing.Value,  Missing.Value, Missing.Value, Missing.Value,  Missing.Value);

На самом деле я никогда ими не пользовался, но вы могли бы попробовать Outlook Объекты данных для совместной работы (CDO).Раньше они были дополнением, которое вы могли установить вместе с Outlook, но теперь они предоставляются отдельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top