使用PowerShell发送具有不同发件人地址的电子邮件

时间:2015-04-01 19:14:45

标签: powershell outlook office-automation

我使用PowerShell从Outlook发送电子邮件(完整的自动过程)。这适用于默认邮箱。我在开发网络中有很多限制,不能使用除Outlook和PowerShell之外的任何软件。

我的问题是:是否有方法使用PowerShell从Outlook中的其他帐户发送电子邮件 (在我的Outlook中我有三个帐户A,B和C),即使我有一个预定的。

我使用的代码就是这个。

$o = New-Object -com Outlook.Application
$mail = $o.CreateItem(0)
$mail.importance = 2
$mail.subject = "SUBJECT"
$mail.body = "BODY"
$mail.To = "email001@xx.com;"
$mail.Send()

是否有我可以设置的属性使电子邮件来源为B或C,而不是预定的A.

1 个答案:

答案 0 :(得分:1)

您需要设置MailItem类的SendUsingAccount属性,该属性允许设置一个Account对象,该对象表示要在其下发送MailItem的帐户。例如:

Sub SendUsingAccount() 
 Dim oAccount As Outlook.account 
 For Each oAccount In Application.Session.Accounts 
   If oAccount.AccountType = olPop3 Then 
     Dim oMail As Outlook.MailItem 
     Set oMail = Application.CreateItem(olMailItem) 
     oMail.Subject = "Sent using POP3 Account" 
     oMail.Recipients.Add ("someone@example.com") 
     oMail.Recipients.ResolveAll 
     oMail.SendUsingAccount = oAccount 
     oMail.Send 
   End If 
 Next 
End Sub 

请注意,Microsoft目前不推荐也不支持任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)的Microsoft Office应用程序自动化,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。