Recupera in modo coerente & # 8220; Da & # 8221; indirizzi e-mail tra le versioni di Outlook

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

  •  02-07-2019
  •  | 
  •  

Domanda

Sto lavorando un'applicazione desktop c # autonoma che invia documenti e li importa da Outlook quando vengono rispediti. L'applicazione raccoglie le e-mail da una cartella specificata le elabora e quindi salva il nome del mittente e altre cose in un database.

Funziona bene con Outlook 2003 e 2007 che ha la proprietà SenderEmailAddress. Tuttavia Outlook 2000 e XP non dispongono di questa proprietà e non restituiranno coerentemente name@domain.com. Sto fornendo supporto per queste versioni.

Ho scoperto che una libreria chiamata Outlook Redemption risolverà questo problema, ma sto sviluppando in .net e voglio davvero evitare di scrivere nei registri dei clienti. Ho anche trovato MAPI33 un wrapper .Net attorno a MAPI ma dai forum non è chiaro se sia ancora supportato.

Gradirei qualsiasi suggerimento su un'alternativa .Net alla dll Redemption o un approccio per poter recuperare costantemente un indirizzo e-mail tra le versioni di Outlook.

Mille grazie

AbsFabs

Epilogo: Ho finito per usare una soluzione di questo articolo http://support.microsoft.com/kb/324530. Comprendeva la creazione di una risposta e quindi l'estrazione della risposta all'indirizzo del mailitem creato. Ha funzionato bene per le e-mail inviate su Internet e sta attualmente eseguendo i test di Exchange Server.

Ho trovato anche questo nei miei viaggi http://anoriginalidea.wordpress.com/2008/01/11/getting-the-smtp-email-address-of- an-exchange-mittente-di-un-mailitem-da-outlook-in-vbnet-vsto / sembra essere un tocco coinvolto. Ciò potrebbe comprendere il mio piano B se la mia implementazione esistente non sopravvive ai test.

Grazie per il tuo feedback

AbsFabs

Alla fine ho finito con Redemption. Ottimo strumento per il lavoro. Il mio problema era con la necessità di registrare la DLL quando è stata installata la mia app. Poiché la mia app è scritta in dotnet, non è necessario registrare nulla. Sono stato in grado di aggirare il problema di registrazione della dll utilizzando COM senza registro.

Mille grazie per la tua ispirazione.

È stato utile?

Soluzione

Sto usando la soluzione di riscatto di Outlook in un codice di produzione C #. Funziona magnificamente. Con esso, puoi ottenere il SenderID di un messaggio di posta (IRDOMail) e da lì puoi utilizzare il metodo GetAddressEntryFromID () dell'oggetto IRDOSession.

Altri suggerimenti

Pur avendo un problema simile al lavoro, abbiamo deciso di seguire la rotta netMAPI, che ha causato alcuni problemi.

Il problema principale è che MAPI ha gestito la propria memoria, così come .NET significa che occasionalmente (abbiamo circa 300 persone che utilizzano il nostro software interno) causerebbe l'arresto anomalo della nostra applicazione, generando l'errore "segnala" di Windows dialog piuttosto che la nostra finestra di dialogo di tracciamento dei bug. Ciò è stato causato dal fatto che i due si sovrascrivono a vicenda cumuli di memoria.

Dato che dobbiamo usare un server di scambio, abbiamo fatto qualche ricerca e abbiamo scoperto che se avessi scritto il codice MAPI in un'app VB6, avrebbe avuto il suo spazio di memoria e quindi non sovrascrivere l'heap .NET.

È un modo piuttosto lungo di fare le cose, ma finora non abbiamo avuto problemi e centinaia (se non migliaia) di e-mail vengono inviate dal nostro staff ogni giorno.

La buona notizia è che sei sulla buona strada per rintracciare le giuste interfacce. La cattiva notizia è che 2000 e XP sono scarsamente supportati in .NET perché sono venuti prima di .NET e solo con il 2003 è stato un vero sforzo per far funzionare la COM in .NET.

La tua soluzione per queste versioni 2000 e XP consisterà nel rintracciare le giuste interfacce COM e racchiuderle da soli. Ho dovuto farlo molte volte per queste versioni di Outlook e non è mai carino. Quindi buona fortuna.

La redenzione può essere utilizzata senza installarla nel registro: è possibile utilizzare RedemptionLoader in C #, VB.Net, Delphi e 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);

Non li ho mai usati, ma potresti provare Outlook Collaboration Data Objects (CDO). In passato erano un componente aggiuntivo che si poteva installare con Outlook, ma ora vengono forniti separatamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top