2010-02-11 79 views
0

我有一個Windows服務發送郵件給用戶。使用的代碼是發送郵件的基本方式。C#窗口服務發送郵件 - 客戶端未經過身份驗證

SmtpClient client = new SmtpClient("servername"); 
MailMessage msg = new Mailmsg(); ...// configuration 
client.send(msg); 

如果我從客戶端設置憑據,我可以通過Exchange服務器(2007)發送郵件。交換服務器配置爲允許發送電子郵件而無需身份驗證(匿名)。

因此,如果我不提供使用usedefaultcredentials false的憑據,它可以在我的控制檯應用程序中使用,但不能在我的Windows服務中使用。

我收到消息「smtp服務器需要安全連接或客戶端未通過身份驗證」。 任何人的想法爲什麼我得到這個時,我使用Windows服務,而不是一個控制檯應用程序(相同的代碼)

回答

0

您的Windows帳戶用於運行您的服務必須沒有足夠的權限。請檢查這些。

0

可能是運行該服務的用戶可能沒有權限發送電子郵件。右鍵單擊該服務,然後在「登錄」選項卡中,您將看到服務在哪個用戶下運行。您可以在此設置用戶。

0

我會創建SMTP會話的日誌文件,只是爲了VERIF你實際上是連接到你以爲你是服務器時,可以再還目測檢查日誌文件,並查看從SMTP服務器返回的實際響應。

要創建SMTP會話的日誌文件,您需要在.config文件中啓用日誌記錄開關。

以下跟蹤開關示例將使SMTP會話記錄到名爲「System.Net.trace.log」的文件中。

<configuration> 
    <system.diagnostics> 
    <trace autoflush="true" /> 

    <sources> 

     <source name="System.Net" > 
     <listeners> 
      <add name="MyTraceFile"/> 
     </listeners> 
     </source> 

     <source name="System.Net.Sockets"> 
     <listeners> 
      <add name="MyTraceFile"/> 
     </listeners> 
     </source> 

    </sources> 


    <sharedListeners> 
     <add 
     name="MyTraceFile" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="System.Net.trace.log"    /> 
    </sharedListeners> 

    <switches> 
     <add name="System.Net" value="Verbose" /> 
     <add name="System.Net.Sockets" value="Verbose" /> 
    </switches> 
</configuration> 

我現在有了更多infomrmation這裏: http://systemnetmail.com/faq/4.10.aspx

0

只是一個想法,但是,您的交換服務是否依賴使用證書的安全通信?如果是這樣,您可能需要再次檢查您的服務是否可以訪問實際上擁有正確證書的證書存儲(基於服務的用戶憑據)

相關問題