2016-12-14 143 views
0

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

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() 
+0

嗨,你可以访问您的Outlook客户端中的两个电子邮件帐户? – sodawillow

+0

我不这么认为,我只看到我的个人电子邮件的设置,因为它属于那个特定的群组,我希望邮件从 – Neil

+0

发送。然后尝试使用Send-MailMessage。您可以使用它指定一个SMTP服务器。 https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/send-mailmessage – sodawillow

回答

0

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

$sendSmtpAddress = "[email protected]" 
$account = $ol.session.acounts | ? { $_.smtpAddress -eq $sendSmtpAddress } 

然后,分配给SendUsingAccount财产发送

$mail.SendUsingAccount = $account 
$mail.Send() 

完整的示例

$sendSmtpAddress = "[email protected]" 
$ol = new-object -comobject "outlook.application" 
$account = $ol.session.accounts | ? { $_.smtpAddress -eq $sendSmtpAddress } 
$mail = $ol.CreateItem(0) 
$mail.recipients.add("[email protected]") | 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 [email protected] -to @(re[email protected], [email protected]) -subject "Email Subject" -body "Email Body" 

如果使用send-mailmessage,它可以设置显示发件人姓名例如使用表格"Display Name <[email protected]>"

-from "Deployment Alerts <[email protected]>" 

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

一对夫妇,我认为是很好的做法点:

  1. 根据SMTP服务器的配置,可能会有一点,或者没有在“发件人”地址的验证。值得使用您有权访问的真实帐户,以便您能够看到任何反弹/未送达报告。
  2. 请考虑在邮件正文(可能是页脚)中包含一些提到警报来自哪里以及哪些进程生成它的内容。这可以帮助您的继任者或同事未来追踪脚本。
+0

哇感谢这么多那最后一行代码更加简单和准确,我非常需要非常感谢 – Neil

+0

不用担心Neil,很高兴帮助。我使用的另一种技术是为发件人设置显示名称。这显示在收件人的电子邮件客户端中,而不是完整的SMTP地址。我会更新帖子以包含此内容。 – andyb

+0

太棒了!再次感谢! – Neil