从不同的邮箱发送带有Powershell的电子邮件

时间:2016-12-14 18:33:09

标签: email powershell outlook

我创建了一个小的PS脚本来为我的管道创建一个电子邮件,以便在部署时发送出去。问题是我不希望从我的个人电子邮件发送电子邮件,而是从公司的Outlook电子邮件发送。我搜索并查看了不同的SMTP服务器名称并使用mail.from,但我无法让它工作。有人可以帮帮我吗?

 param(
[Parameter(Mandatory=$true,Position=0)]
[string]$Address1,
[Parameter(Mandatory=$true,Position=1)]
[string]$Address2,
[switch]$Recurse,
[switch]$Force  
)

 $ol = New-Object -comObject Outlook.Application  
 $mail = $ol.CreateItem(0)  
 $Mail.Recipients.Add($Address1) 
$Mail.Recipients.Add($Address2) 
$Mail.Subject = "DSC Deployment in Progress"  
$Mail.Body = "There is a DSC install beginning. . ."  
$Mail.Send() 

2 个答案:

答案 0 :(得分:2)

您需要为SendUsingAccount属性分配值。该帐户可在(outlook).Session.Accounts集合中找到。

$sendSmtpAddress = "some.name@somedomain.com"
$account = $ol.session.acounts | ? { $_.smtpAddress -eq $sendSmtpAddress }

然后,在发送

之前分配给SendUsingAccount属性
$mail.SendUsingAccount = $account
$mail.Send()

完整示例

$sendSmtpAddress = "some.name@somedomain.com"
$ol = new-object -comobject "outlook.application"
$account = $ol.session.accounts | ? { $_.smtpAddress -eq $sendSmtpAddress }
$mail = $ol.CreateItem(0)
$mail.recipients.add("target.user@somedomain.com") | out-null
$mail.subject = "test email"
$mail.body = "test email"
$mail.SendUsingAccount = $account
$mail.Send()

对于它的价值,我放弃了很久以前尝试通过Outlook发送电子邮件,使用普通SMTP更容易。根据本地SMTP服务器(Exchange?)上的安全策略,您可以“发送”为本地域中的任何用户。向您的IT人员询问可用于发送电子邮件的内部SMTP服务器的名称/ IP,然后就像以下一样简单:

send-mailmessage -smtpServer (servername or IP) -from sender.name@domain.com -to @(recipient1@domain.com, recipient2@domain.com) -subject "Email Subject" -body "Email Body"

如果使用send-mailmessage,则可以使用"Display Name <sender.name@domain.com>"表单为发件人设置显示名称,例如

-from "Deployment Alerts <sender.name@domain.com>"

收件人将在其电子邮件客户端中看到显示名称,而不是SMTP地址。

我认为有几点是好的做法:

  1. 根据SMTP服务器的配置,可能很少或没有验证“发件人”地址。使用您可以访问的真实帐户是值得的,这样您就可以看到任何退回/未送达报告。
  2. 考虑在邮件正文(可能是页脚)中包含一些内容,提及警报来自何处以及生成警报的过程。这可以帮助您的继任者或同事在将来追踪脚本。

答案 1 :(得分:0)

类似的任务

$mail.SendUsingAccount = $account

从Windows Server 2000到Windows Server 2008以及从Outlook 2007到Outlook 2016一直为我工作。自Windows Server 2016以来,我遇到了异常(服务器引发了异常。(HRESULT的异常:0x80010105(RPC_E_SERVERFAULT)))

但是还有另一种分配此属性的方法。

[Void] $mail.GetType().InvokeMember("SendUsingAccount","SetProperty",$NULL,$mail,$account)