2014-03-04 53 views
0

我正试图使用​​PowerShell将电子邮件发送到Exchange服务器。我的目标是使用普通的旧SMTP将消息传递给Exchange服务器上的本地用户(邮箱)。 Exchange服务器位于与发送服务器相同的网络和AD域中,并且与登录的发送用户位于同一个网络和AD域中。PowerShell发送没有(默认)身份验证的SMTP电子邮件

但是,我发送的用户无权访问该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(...行之前)。我也没有运气。

我真的很喜欢的解决方案是只使用良好的旧auth免费SMTP在PowerShell中发送电子邮件。

+0

您运行的是哪个版本的Exchange?该脚本是否可以从Exchange服务器上运行? – mjolinor

+0

不知道什么Exchange版本正在运行(并且不应该是相关的)。脚本无法从Exchange服务器运行。高安全性的环境,除了让它工作,几乎没有什么可做的。 :) –

+0

Exchange服务器默认情况下不会执行匿名中继(至少从5.5开始)。如果您希望使用接收连接器进行匿名中继,则必须在服务器上进行修复。如果脚本在Exchange服务器上运行,则可以使用localhost,绕过接收连接器权限。 – mjolinor

回答

0

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

+0

谢谢,但需要解决它在客户端,而不是服务器端。 –

+0

@Tedd - 如果您的服务器不接受匿名连接,除了更改当前配置或使用其他服务器之外,您无法在客户端执行任何操作:) – Raf

0

我意识到这是老了,但我很惊讶,这里没有答案。最初我感到困惑,因为我有一些类似的代码,我用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 

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

相关问题