2010-02-11 64 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

只是一个想法,但是,您的交换服务是否依赖使用证书的安全通信?如果是这样,您可能需要再次检查您的服务是否可以访问实际上拥有正确证书的证书存储(基于服务的用户凭据)

相关问题