2017-08-11 175 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