2014-03-04 88 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 

我希望這可以幫助有這種奇怪問題的人。

相關問題