2008-09-21 5 views
1

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

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

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

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

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

AbsFabs

Эпилог: Я закончил с использованием раствора, из этой статьи 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/ похоже, что это касание. Это может включать мой план B, если моя существующая реализация не выдерживает тестирования.

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

AbsFabs

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

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

+0

Чтобы уточнить, пытаетесь ли вы создать надстройку для Outlook, которая будет выполнять эту задачу? Или вы создаете автономное консольное/оконное приложение для выполнения этой работы? – 2008-09-21 21:55:42

ответ

1

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

-1

Я никогда не использовал их, но вы можете попробовать Outlook Collaboration Data Objects (CDO). Раньше они были дополнением, которое вы могли установить с помощью Outlook, но теперь они предоставляются отдельно.

0

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

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

1

Имея аналогичную проблему на работе, мы решили перейти по маршруту netMAPI, что вызвало некоторые проблемы.

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

Поскольку мы должны использовать сервер обмена, мы провели некоторое исследование и обнаружили, что если вы написали код MAPI в приложении VB6, у него будет собственное пространство памяти и, следовательно, не будет перезаписывать кучу .NET.

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

0

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^