【问题标题】:PowerShell send SMTP email without (default) authenticationPowerShell 发送没有(默认)身份验证的 SMTP 电子邮件
【发布时间】: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


【解决方案1】:

1) 创建新的接收连接器
2) 启用匿名身份验证
3) 将其锁定到您正在运行脚本的计算机的 IP 地址

【讨论】:

  • 谢谢,但需要在客户端解决,而不是服务器端。
  • @Tedd - 如果您的服务器不接受匿名连接,那么除了更改当前配置或使用另一台服务器之外,您在客户端无能为力:)
【解决方案2】:

我意识到这是旧的,但我很惊讶这里没有答案。最初我很困惑,因为我有一些用 C# 编写的类似代码,它工作得很好。似乎 PowerShell 将默认使用某人的凭据。我不会假设它是运行脚本的人,但它可能是。

当我建立凭证对象时,我为用户名和密码传递了一个空格,这似乎工作正常。

$credential = New-Object System.Management.Automation.PSCredential (" ", " ")

如果我完全省略了凭据部分,那么它将使用某人的凭据或其他东西。到目前为止,我收到以下消息:

The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated

我希望这可以帮助遇到这种奇怪问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2015-07-08
    • 2011-06-18
    • 2011-01-17
    • 1970-01-01
    • 2020-08-04
    • 2017-09-07
    • 2012-12-02
    相关资源
    最近更新 更多