2010-09-16 99 views
1

我們只是改變了我們的.NET mailSettings定位到新的SMTP服務器,但嘗試發送由於參數電子郵件「語法錯誤,當我們遇到以下問題服務器響應爲:句法無效EHLO參數(S)」SmtpException(語法無效EHLO參數)

我認爲我們的參數(用戶名,主機,密碼和端口)是正確的,因爲如果我們部署在另一臺服務器相同的應用程序,一切工作正常。

能,我們有問題的服務器的名稱(機器名稱中包含下劃線)負責此SMTP例外?如果是這樣,那麼修復它的最好方法是什麼?

謝謝!

編輯:

我們使用的是基本.NET System.Net.Mail.SmtpClient如

Client = new System.Net.Mail.SmtpClient(host, Convert.ToInt32(port)) 
{ 
    Credentials = new NetworkCredential(username, password) 
}; 
Client.Send(message); /*where message is an instance of MailMessage */ 
(host xx.xx.gridserver.com, userName [email protected], port 587) 
+1

您需要顯示一些代碼。 – 2010-09-16 19:38:33

+0

我不認爲服務器名稱是一個問題,或者你根本得不到迴應。你在使用內置的.NET Smtp類嗎? – 2010-09-16 19:40:04

回答

1

EHLO只能任選被郵件服務器的支持。如果服務器以EHLO開頭,則客戶端可以使用EHLO(並暗示更多功能)。如果服務器HELO開始它更基本的,並且客戶端不能說EHLO回沒有得到任何(一)錯誤+故障或(b)一個錯誤+能力回退到上HELO(這樣你就可以得到的錯誤,但仍然發送郵件)。

檢查新服務器上運行的軟件,可能是將其升級或將其切換到運行在舊服務器上的軟件(如果可能的話),或者可能有設置停止mailSettings使用高級問候語。

1

根據this link下劃線可能是問題。我們遇到了完全相同的問題,也出現在名稱中帶有下劃線的主機上。

編輯。

我沒有找到一個修復:有人發帖,它使用反射來覆蓋專用主機變量擴展SmtpClient。 See here for the fix.

注意的是,私有字段的名稱已被.NET運行庫的版本之間變化,所以修改代碼如下:

/// <summary> 
/// Returns the private "localHostName" field. 
/// </summary> 
/// <returns> 
/// The <see cref="FieldInfo"/> for the private 
/// "localHostName" field. 
/// </returns> 
/// <remarks>In earlier versions of .NET this private field was 'localHostName', now it is 'clientDomain'</remarks> 
private static FieldInfo GetLocalHostNameField() 
{ 
    const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; 
    System.Reflection.FieldInfo result = typeof(SmtpClient).GetField("clientDomain", flags); 
    if (null == result) 
    result = typeof(SmtpClient).GetField("localHostName", flags); 
    return result; 
} 

用法:

SmtpClientEx client = new SmtpClientEx(); 
client.LocalHostName = "localhost"; 

MailMessage msg = new MailMessage(); 
... 
msg.Send() 
+0

我們找不到解決方案來修復它,所以我們決定使用另一臺smtp服務器。它正在與它合作。我敢打賭,可能是我們服務器名稱上的下劃線,並未被smtp服務器接受。 – Xavier 2010-10-07 19:18:39

0

嘗試刪除強調不是拉丁字母從計算機的名稱

例如:

我有「PC-4-ПК」,改成「PC-4」後,everething工作正常。