2013-09-30 42 views
0

我想從我的C#.NET應用程序發送郵件,我用這個代碼:發送郵件與Outlook.Application C#

var mailItem = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
    mailItem.Subject = "Error Report from user: " + AuthenticationManager.LoggedInUserName; 
    mailItem.HTMLBody = "Test email\n"+ReadSignature(); 
    mailItem.To = "[email protected]"; 
    mailItem.Display(true); 

郵件不會發送,而是加入到發件箱文件夾。我懷疑郵件沒有發送,因爲Outlook未啓動。所以我google了一下,想出了這個:

 var oApp = new Outlook.Application(); 

     Microsoft.Office.Interop.Outlook.NameSpace ns = oApp.GetNamespace("MAPI"); 
     var f = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 

     Thread.Sleep(5000); // a bit of startup grace time. 

     var mailItem = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
     mailItem.Subject = "Error Report from user: " + AuthenticationManager.LoggedInUserName; 
     mailItem.HTMLBody = "Test email\n"+ReadSignature(); 
     mailItem.To = "[email protected]"; 

     mailItem.Display(true); 

但它再次結束在發件箱文件夾。我需要啓動outlook,因爲我無法在每個客戶端application.config中指定FromMail屬性。有任何想法嗎?

+0

如果您正在使用的Web應用程序,那麼你可以從郵件在web.config文件 – user1102001

+0

配置你真的需要這個矯枉過正只需發送簡單的電子郵件?有些課程允許在沒有Outlook的情況下直接發送郵件。 – Rafal

回答

3

你需要調用MailItem.Send方法:

mailItem.Send(); 
+0

不起作用,郵件仍然在Outlook中發送到我的發件箱文件夾中。 –

+0

@TobiasMoeThorstensen可能允許收件箱大小。如果那麼電子郵件將發送到發件箱,直到有足夠的空間可用,你檢查了嗎? – Kurubaran

+0

@AccessDenied否但我通過啓動Outlook進程來修復它,然後打開創建郵件對話框。 –

0

嘗試使用Namespace.SyncObjects收集或Namespace.SendAndReceive方法來啓動同步。

請注意,消息提交是一個異步過程,所以您需要保留對名稱空間對象和SyncObject的引用(如果您使用的話),直到實際發送消息。

0

檢查this answer類似的問題 - 它包含的解決方案,你不必使用

Thread.Sleep(5000)