【发布时间】:2014-03-04 13:08:41
【问题描述】:
我正在尝试使用 PowerShell 将电子邮件发送到 Exchange 服务器。我的目标是使用普通的旧 SMTP 将消息传递给 Exchange 服务器上的本地用户(邮箱)。 Exchange 服务器与发送服务器和登录的发送用户位于同一网络和 AD 域中。
但是,我发送邮件的用户无权在该 Exchange 服务器上发送电子邮件。默认情况下,PowerShell 似乎使用登录的用户凭据发送身份验证。
$smtp = new-object Net.Mail.SmtpClient("exchangeserver.mylan")
$smtp.Send($emailFrom, $emailTo, $subject, $message)
我尝试在$smtp.Send(... 行之前添加$smtp.UseDefaultCredentials = $false,但没有成功。
一种解决方案是允许此用户在 Exchange 服务器上发送邮件。但是用户会根据运行此脚本的服务而改变,所以我不想那样解决。
另一种解决方案是使用$smtp.Credentials = New-Object System.Net.NetworkCredential("DOMAIN\user", "password") 之类的东西对凭据进行硬编码(也在$smtp.Send(... 行之前)。我在这方面也没有运气。
我真正想要的解决方案是使用旧的无身份验证 SMTP 在 PowerShell 中匿名发送电子邮件。
【问题讨论】:
-
您运行的是哪个版本的 Exchange?脚本可以从 Exchange 服务器运行吗?
-
不确定 Exchange 版本正在运行(并且不应该相关)。无法从 Exchange 服务器运行脚本。高度安全的环境,所以除了让它工作之外几乎没有什么可做的。 :)
-
Exchange 服务器默认不做匿名中继(至少从 5.5 开始没有)。如果您希望它使用接收连接器进行匿名中继,则必须在服务器上进行修复。如果脚本在 Exchange 服务器上运行,您可以使用 localhost,绕过接收连接器权限。
-
不想要中继,想要本地传递(消息的行尾)。
-
如果您将 SMTP 发送到另一台将为您发送邮件的 SMTP 服务器,或者将其发送到另一台将为您发送邮件的服务器,这就是中继。
标签: authentication powershell smtp