2014-10-07 68 views
0

我有一個運行在Windows Server 2003上的ASP.NET應用程序,作爲其功能的一部分,它向用戶發送電子郵件以響應用戶註冊,密碼重置等。它運行在局域網內(實際上在州政府防火牆內部)。這裏是一些典型的代碼:SmtpClient函數如何沒有主機名?

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); 
message.IsBodyHtml = true; 
message.From = new MailAddress(FromEmail); 
message.To.Add(ToEmail); 
message.Subject = Subject; 
message.Body = FormattedMessageText; 

SmtpClient client = new SmtpClient(); 
client.Send(message); 

請注意,它調用SmtpClient構造函數而不指定主機名!發送工作正常。我試圖瞭解如何在沒有指定主機名的情況下工作(同一個Web服務器上的其他應用程序使用特定的主機名)。這一個不使用一個,但仍然有效!除了一個特殊的函數,它在任何情況下都不起作用,但是在一個特定的情況下,它總是返回「無法連接到遠程服務器」,我在過去經歷過一次沒有指定主機名。

奇怪的是,web.config中有一個mailSettings節點。它是應用程序的開發,因爲它當時產生明顯的默認值:

<system.net> 
    <mailSettings> 
     <smtp> 
      <network host="127.0.0.1" port="25" userName="" password="" /> 
     </smtp> 
    </mailSettings> 
</system.net> 
+0

是否有任何在你的web.config(或應用程序)指定smtp?它可能使用默認的中繼服務器,但很難說。 – Sam 2014-10-07 22:43:54

+0

檢查應用程序所在機器的machine.config – Sam 2014-10-07 22:45:56

+0

@Sam,我已將web.config中的mailSettings添加到問題中。在machine.config中沒有關於Smtp或mailSettings的有趣內容 – Cyberherbalist 2014-10-07 22:56:16

回答

0

您可以檢查配置部分web.config文件。 實施例:

<mailSettings> 
    <smtp_1 from="[email protected]" deliveryMethod="SpecifiedPickupDirectory"> 
     <specifiedPickupDirectory pickupDirectoryLocation="c:\temp" /> 
    </smtp_1> 
    </mailSettings> 

另外,變換部:

<mailSettings xdt:Transform="Replace"> 
    <smtp_1 from="[email protected]"> 
     <network enableSsl="true" host="smtp.domain.com" port="587" userName="[email protected]" password="mypassword" /> 
    </smtp_1> 
    </mailSettings> 

    <system.net> 
    <mailSettings xdt:Transform="Replace"> 
     <smtp from="[email protected]"> 
     <network enableSsl="true" host="smtp.domain.com" port="587" userName="[email protected]" password="mypassword" /> 
     </smtp> 
    </mailSettings> 
    </system.net> 
+0

幾分鐘前,我在這個問題中添加了mailSettings。 – Cyberherbalist 2014-10-07 22:57:28

1

如果一個web.config沒有被指定爲在@WPalombini回答,那麼如果機器具有Microsoft SMTP服務安裝(或者是一個Exchange服務器),那麼郵件正在寫入一個文件,從而被Microsoft SMTP服務(或Exchange Server)排隊等待傳遞。如果Microsoft SMTP服務配置爲指向網絡中的有效SMTP服務器,則會傳遞您的消息。否則,他們會在機器上的郵件文件夾中排隊(默認情況下通常是c:\ inetpub \ mailroot \ queue \)。

相關問題