我创建了一个小的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()
答案 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 :(得分: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)