我有一台多角色 Exchange 2010 服务器,需要按月执行 Powershell 脚本。
而且我真的很想在任务结束前通过电子邮件将报告发送到一些当地公司的邮箱。
我创建了一个具有所需权限的服务帐户,并编写了一个 Powershell 脚本,该脚本作为服务帐户运行时一切正常 - 除了电子邮件报告部分。
将我的 Exchange 服务器的 IP 添加到允许匿名的接收连接器对我来说听起来不太正确,也许有最佳做法可以做到这一点?
任何意见都非常感谢!
更新:
至于脚本的邮件部分,通常我使用 .NET Net.Mail.MailMessage 对象,如下所示:
$SmtpServer = "exchangeserver.corp.company.com"
$Msg = New-Object Net.Mail.MailMessage
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer)
$Msg.From = "[email protected]"
$Msg.ReplyTo = "[email protected]"
$Msg.To.Add("[email protected]")
$Msg.Subject = "Monthly script execution report"
$Msg.Body = "Everything's ok, some statistics etc."
$Smtp.Send($Msg)
当我使用此代码时,Exchange 服务器回答“服务不可用”。对我来说,这是有道理的,因为没有配置接收连接器。标准Send-MailMessage
Powershell 命令给出相同的结果,因此问题不在于代码,实际上它在非 Exchange 服务器上运行良好。
目前我有三个接收连接器:
- 一个用于外部邮件,其 FQDN 为 mail.company.com,在端口 25 上接受连接
- 一个用于内部 Exchange 客户端,其 FQDN 为 exchangeserver.corp.company.com,位于标准 SSL 端口 587 上
- 一个是通过 Exchange 发送邮件而无需在端口 25 上使用 FQDN exchangeserver.corp.company.com 进行身份验证的本地服务器列表(这不是一个完美的解决方案,我不希望将我的 Exchange 服务器的 IP 添加到列表中)
所以我正在寻找一种安全且有效的方法来使其工作,提前感谢!
答案1
解决方案非常简单,将 ExchangeServiceAccount 的密码设置为 SecureString $ExchangeServicePassword 变量:
# 邮件服务器 $SmtpServer = “mail.company.com” # .NET 对象 MailMessage $Msg = 新对象 Net.Mail.MailMessage # .NET 对象 SMTP 服务器和 SMTP 身份验证参数 $Smtp = 新对象 Net.Mail.SmtpClient($SmtpServer, 587) $Smtp.Credentials = 新对象-类型名称系统.管理.自动化.PSCredential-参数列表“ExchangeServiceAccount”,$ExchangeServicePassword $Smtp.EnableSsl = $true # 电子邮件结构 $Msg.发件人 = "[电子邮件保护]“ $Msg.回复 = "[电子邮件保护]“ $Msg.To.Add("[电子邮件保护]“) $Msg.Subject = “主题” $Msg.Body = "一些文本" $Msg.SubjectEncoding = [System.Text.Encoding]::UTF8 $Msg.BodyEncoding = [System.Text.Encoding]::UTF8 # 发电子邮件 $Smtp.发送($Msg)