2010-05-28 114 views
10

我正在使用.NET 3.5,我想自動發送郵件。我目前使用下列內容:用C發送電子郵件#

Microsoft.Office.Interop.Outlook.MailItem mailMsg = 
    (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem(
    Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 
mailMsg.To = recipient; 
mailMsg.Subject = subject; 
mailMsg.Body = body; 
mailMsg.Send(); 

不過,我發現了幾個文章,似乎在暗示我應該使用下面的方法:

System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage(); 
mailmsg.To = recipient; 
mailmsg.Subject = subject; 
mailmsg.Body = body; 

誰能告訴我有什麼區別兩個命名空間如果,以及爲什麼你可能想要使用另一個命名空間?

回答

9

第二個示例需要一個SMTP服務器來建立直接連接,並使用此SMTP服務器發送電子郵件。它具有低開銷,通常會正常工作。

如果您需要編寫&發送有關當前用戶行爲的電子郵件,則可以使用outlook。

到目前爲止,我只看到了前景劣勢的答案。但它有幾個優點:

  • 您不必向用戶詢問任何配置。
    • 展望已經知道在Exchange/SMTP服務器,
  • 電子郵件發送將被存儲在用戶的發送項列表中的用戶的電子郵件地址。所以用戶可以看到wat是以他的名字發送的。
  • 加載項簽名/加密外發電子郵件,或添加一個標準的公司聲明將被使用,所以你會遵循公司的政策
  • 可以提示用戶,如果它被允許發送電子郵件(是的,這可能是一個優勢)
  • 您可以選擇只編寫郵件,將其呈現給用戶。用戶可以編輯並選擇發送或不發送。

編輯: 我使用SMTP方式發送郵件技術(如日誌文件&錯誤消息)對我們的支持單位,這些郵件出去快被忽視。

用於將我的用戶的行爲發送給其他人的郵件的Outlook方法。這些郵件很慢,但可追蹤等。

3

第一個使用COM interop,這是不需要的開銷。其次是具有所有功能的純淨.net。另外它更加靈活。

10

我假設第一個需要將Outlook安裝在機器中,以便安裝Office Interop程序集。第二個是純粹的.Net框架。

+3

另外值得注意的是,實例化outlook的開銷並不是微不足道的。 – Paddy 2010-05-28 11:51:57

5

第一種方法是通過創建Outlook實例(outlookApplication)並使該實例的Outlook發送電子郵件來使用interop。

第二個用於通過普通的舊SMTP發送電子郵件,根本不需要Outlook。

除非您有特定的interop需求,否則不需要使用outlook發送電子郵件(並且您的代碼不適用於任何未安裝Outlook的計算機上)。

1

第一個是使用MS Office,你不想發佈,而System.Net.Mail在安裝.Net框架時可用。

1

第一個示例使用由Office Interop Assemblies下載安裝的庫。

第二個示例使用.NET框架System.Net默認安裝的庫。

第一個示例使用Microsoft Interop庫。我會與你的第二個例子,因爲它是默認的.NET安裝的一部分。互操作庫會有更多的開銷,這也不是必需的。

1

Microsoft.Office使用Microsoft Outlook發送電子郵件。它需要安裝Outlook,並且(至少是我最後一次嘗試以這種方式發送郵件)更容易出現困難。 (例如,它提示用戶讓他們知道某個程序正在嘗試以他們的名義發送郵件等)

System.Net.Mail只使用純.NET,並且指定的SMTP服務器發送郵件。 相信我..避免使用Office,除非有需要。

+0

有一個名爲ClickYes的應用程序,可以刪除令人討厭的彈出窗口(或者以您的名義點擊它)。鏈接是http://www.contextmagic.com/express-clickyes/。 我不得不說我同意你100%的System.Net.Mail策略,而不是使用Outlook或Outlook插件。包裝帶我繞着彎道駛過。 – Koekiebox 2010-08-24 08:53:17

1

您需要在任何一天使用第二個選項。這是純粹的.NET。

如果你使用第一個選項,我猜Outlook應該已經安裝在那臺機器上。部署時,如果服務器中未安裝MS Office,則會出現問題。

2

它們是不同的。 MailItem表示Outlook中的郵件項目。 MailMessage表示可以使用SmtpClient類發送的電子郵件。

檢查MailItemMailMessage

2

第一個使用COM Interop並使用Outlook作爲其基礎。它需要配置Outlook。第二個是使用SMTP客戶端。互操作性可能會讓你遇到與Outlook相關的問題,但會允許一些很酷的功能,比如打開郵件窗口(但通常不值得)。第二個將發送無聲郵件,雖然你可以顯示你自己的窗口,但仍然不會允許Outlook自動化的靈活性。我的選擇是System.Net.Mail。*。

3

正如其他人所說,第一個使用Outlook發送電子郵件。缺點是用戶必須安裝Outlook。它的好處是它看起來像是發送它。

第二種方法將嘗試直接發送郵件。好處是它不需要安裝Outlook,而且開銷少得多。此選項的缺點是,現在大多數企業阻止端口25,所以當您嘗試發送消息時,它將失敗。