2010-08-13 79 views
1

我正在編寫一個需要使用MAPI發送電子郵件的c#.net應用程序。我正在使用以下庫來實現此目的:http://www.codeproject.com/KB/IP/SendFileToNET.aspx 以下是我如何使用它的示例。windows live mail mapi支持

MAPI mapi = new MAPI(); 
mapi.AddRecipientTo("[email protected]"); 
int returncode = mapi.SendMailPopup("subject", "message"); 
if(returncode==0) 
{ 
MessageBox.Show("User sent message"); 
} 
else if (returncode==1) 
{ 
MessageBox.Show("User abort"); 
} 

這段代碼打開上默認的郵件程序中的新的消息對話框,並應顯示如果用戶決定發送或中止發送電子郵件。

當使用Outlook意味着它彈出一個新的電子郵件對話框並返回正確的錯誤代碼,例如用戶決定不通過關閉消息對話框發送消息時,此代碼工作正常。

問題是,當使用Windows郵件這不能正常工作。發送郵件對話框正確打開,應用程序暫停其在mapi.SendMailPopup上的執行,直到郵件對話框關閉。然而,無論用戶做什麼,mapi.SendMailPopup總是返回零。如果用戶例如決定關閉消息對話框而不發送消息,則當正確的響應爲1(用戶中止)時,mapi.SendMailPopup返回0。

我的問題是應該的Windows Live Mail都需要這種MAPI的支持,如果沒有誰能告訴我一些其他免費的Windows郵件客戶端,將提供所需的MAPI的支持

+0

微軟正在努力擺脫MAPI。這將是一種方法... – 2010-08-13 16:02:09

+0

有什麼選擇?我需要使用外部郵件程序從我的應用程序發送電子郵件。 – Jargo 2010-08-13 17:18:37

+0

如果您想通過那裏管理郵件並利用它們在已發送郵件中,使用簽名等或SMTP,則另一種方法是Outlook對象模型。 – 2016-02-08 11:47:55

回答

1

這是confusing--是.NET解決方案是SMAPI,而不是MAPI。我不確定SMAPI的返回值有多可靠,特別是因爲返回值是從默認的MUA供應商的SMAPI實現中直接返回的,並且至少有十幾個這樣的結果。由於瀏覽器不使用返回值,而且它們是SMAPI的主要客戶,所以我不會依賴它。

+0

你可以指點我一些更好的.net mapi實現。 – Jargo 2010-08-13 17:15:39

+0

我不確定還有什麼。再說一遍,如果它的工作原理除了返回值,只要忽略返回值;除了日誌以外,我不確定它會用到什麼。 – 2010-08-15 12:52:43