email - 使用Powershell从其他邮箱发送电子邮件

标签 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() 

最佳答案

您需要为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()

对于它的值(value),我很久以前就放弃尝试通过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地址。

我认为是好的做法,有几点:
  • 根据SMTP服务器的配置,可能很少或没有对“发件人”地址的验证。值得使用您可以访问的真实帐户,以便查看所有退回/未送达报告。
  • 考虑在邮件正文中包含一些内容(可能是页脚),以提及警报的来源以及生成该警报的过程。这可以帮助您的继任者或同事将来查找脚本。
  • 关于email - 使用Powershell从其他邮箱发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41149684/

    相关文章:

    php - 如何在html电子邮件中嵌入图像

    powershell - 在try/catch中使用Powershell-else

    powershell - 获取 PowerShell 进程的进程 ID

    javascript - JS ActiveXObject Outlook.Application按字节数组添加附件

    javascript - 电子邮件模板的背景图像在 outlook 任何版本中均不起作用

    c# - 在 C# 中阅读 MS Exchange 电子邮件

    python - 当泡沫工作完成时如何向自己发送电子邮件通知?

    security - 为什么电子邮件需要信封, "envelope"是什么意思?

    arrays - 如何向 powershell 对象添加新属性

    command-line - 使用与会者和位置集打开 Outlook 约会的命令行是什么?