2017-08-11 227 views
0

我想從Outlook COM對象發送一封電子郵件,但是來自不是我的主帳戶的「帳戶」。我試圖搜索我的帳戶,但它只列出1個帳戶,並且始終只從該帳戶發送。我試圖發送的另一個帳戶是共享郵箱,例如文件夾。我可以訪問郵箱並回復Outlook中的郵件,並從中提供正確的電子郵件,但是在程序中它只能提供我的標準信息。C#Outlook COM對象從發送郵件的郵箱發送電子郵件

Microsoft.Office.Interop.Outlook.Application oApp = new 
Microsoft.Office.Interop.Outlook.Application(); 
Microsoft.Office.Interop.Outlook.NameSpace oNS = oApp.GetNamespace("mapi"); 
Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oApp.CreateItemFromTemplate("c:\\test\\CAEmail.oft", inbox); 

Outlook.Accounts accounts = oApp.Session.Accounts; 

foreach (Outlook.Account account in accounts) 
{ 
    oMsg.Subject = subj; 
    oMsg.HTMLBody = message; 
    oMsg.To = emailTo; 
    oMsg.SendUsingAccount = account; 
    oMsg.Send(); 
} 
+0

您只能從您登錄的帳戶發送。 Interop正在使用Windows用戶環境訪問Outlook。該電子郵件位於users文件夾中的一個pst文件中,該文件只能由所有者訪問。 – jdweng

回答

0

首先,你需要給每個需要在Outlook中發送電子郵件時創建新的郵件項目:

Microsoft.Office.Interop.Outlook.MailItem oMsg = null; 
Outlook.Accounts accounts = oApp.Session.Accounts; 

foreach (Outlook.Account account in accounts) 
{ 
     oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oApp.CreateItemFromTemplate("c:\\test\\CAEmail.oft", inbox); 
     oMsg.Subject = subj; 
     oMsg.HTMLBody = message; 
     oMsg.To = emailTo; 
     oMsg.SendUsingAccount = account; 
     oMsg.Send(); 
} 

要知道,一個帳戶應在Outlook中配置爲能夠發送該項目。你

也可以考慮使用的MailItem類,允許設置一個字符串,指示該郵件的發送者意圖的顯示名稱的SentOnBehalfOfName財產。請注意,您需要擁有足夠的權限才能代表他人發送。

+0

當我使用SendOnBehalfOfName時,出現以下錯誤:Message =「沒有SmtpAddress的帳戶:-----存在!」。我用----替換了電子郵件地址 – user1433164

0

您需要在目標郵箱中創建郵件 - 而不是使用GetDefaultFolder,請使用GetSharedDefaultFolder