我创建了一个小的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地址。
我认为是好的做法,有几点:
关于email - 使用Powershell从其他邮箱发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41149684/