2013-10-28 41 views
1

我有一個需要創建.Net應用程序將發送郵件消息(附件和可能的HTML格式),但不使用System.Net.Mail(我們不能要求用戶SMTP詳細信息)或Outlook(這是用於未安裝Outlook的PC)。發送電子郵件沒有Outlook或System.Net.Mail

我一直在尋找MAPI今天,但它似乎只能通過創建一個C/C++ library and then using a .NET wrapper這是一個陌生的領域很多工作來實施。大多數示例代碼和項目都很老舊,有些依賴於SMTP服務器的細節,一旦你開始討論。

是否存在.net友好的解決方案來發送沒有SMTP,Outlook的電子郵件,或鑽研C++和MAPI?也許是第三方MAPI庫?

+0

是否通過網絡發送SMTP?因爲有多種方法可以使用SMTP。請參閱'deliveryMethod' http://msdn.microsoft。com/en-us/library/ms164240(v = vs.110).aspx –

+0

沒有問題是我被告知我不能要求用戶填寫任何SMTP詳細信息。 –

+0

您是否考慮過Amazon Simple Mail Service? –

回答

2

我發現了一種方法可以避免上述所有的缺陷,但它並不精彩。這article涵蓋了什麼是必需的,但它似乎有點擊中和取決於系統的設置。

基本上你必須使用System.Runtime.InteropServices來裝飾StructLayout屬性所需的各種類,以便它們在內存中正確處理。這使您可以使用MAPI32.DLL Sendmail的功能:

<DllImport("MAPI32.DLL")> _ 
Private Shared Function MAPISendMail(ByVal sess As IntPtr, 
     ByVal hwnd As IntPtr, ByVal message As MapiMessage, 
     ByVal flg As Integer, ByVal rsv As Integer) As Integer 
End Function 

我已經開發了基於此的一些.NET代碼大多的作品,但沒有從長遠來看在managed code is simply not compatible with MAPI問題已導致this follow up question

+0

在閱讀了它的一些文檔後,我已經部分糾正了。這可能確實有效,因爲用戶安裝了Mapi兼容的客戶端(Outlook,Thunderbird)。 – CodeCaster

0

的SMTP或其他郵件服務器必要,如果你想發送郵件。您使用Outlook等電子郵件應用程序重定向您的郵件消息,然後再與使用SMTP最終傳遞消息的Exchange進行交談,但是忽略了最終使用SMTP的事實。

你想做的不可能:你不想依賴已經安裝的郵件應用程序(Outlook,Thunderbird),也不想連接到郵件服務器:那麼你不能發送郵件。

至於這部分你的問題的描述:

我們不能要求用戶SMTP細節

然後你可以或許編寫一個Web服務,你主機,該主機是一個層一個受您控制的SMTP或Exchange服務器。您編寫此服務以接受來自應用程序的郵件消息,以便客戶端可以在不知道底層傳輸或服務器配置的情況下調用它。所有他們需要知道的是您的服務地址。

然後,您的應用程序可以向服務發送SendEmail()請求,而無需在客戶端配置SMTP服務器或Outlook連接。

+0

如果電子郵件是內部郵件並且公司正在使用Exchange,則不需要SMTP參與。我每天從同事那裏收到10封電子郵件,這是通過MAPI完成的。 –

+0

很顯然,在某些時候需要SMTP服務器,這是一個給定的。我已經編輯了關於確切要求的更精確的問題。 –

+0

你在這方面是正確的,我認爲OP想要發送郵件給外部世界。 – CodeCaster