无法从Win7上的Windows服务发送SMTP电子邮件

我正在使用c#.NET 4.0编写Windows服务(我的开发工作站是Windows 7)。 目的是在处理过程中出现错误时直接从服务发送电子邮件。 我已经包含了一个代码片段来显示我想要实现的目标:

try { string emailAddresses = "me@sample.com"; string emailCCAddresses = "you@sample.com"; //Send the email using (MailMessage mailMsg = new MailMessage()) { mailMsg.To.Add(emailAddresses); mailMsg.From = new MailAddress("winService@sample.com"); mailMsg.CC.Add(emailCCAddresses); mailMsg.Subject = " Error Message "; mailMsg.Body = DateTime.Now + " : Invalid File Encountered." ; ////Creating the file attachment using (Attachment data = new Attachment("C:\\users\\sample.xml", MediaTypeNames.Application.Octet)) { //Add timestamp info for the file ContentDisposition disposition = data.ContentDisposition; disposition.ModificationDate = File.GetLastWriteTime("C:\\users\\sample.xml"); mailMsg.Attachments.Add(data); SmtpClient emailClient = new SmtpClient("example.Sample.com", 25); emailClient.DeliveryMethod = SmtpDeliveryMethod.Network; emailClient.UseDefaultCredentials = true; emailClient.Send(mailMsg); } }//end using } catch (Exception e) { Console.WriteLine(e.ToString()); } 

我面临的问题是 – 电子邮件选项无法在任何Windows 7计算机上的win服务中运行。 但是,完全相同的代码将在Win XP机器上完美地运行。 警告,这不能作为控制台应用程序进行测试。 它需要作为服务运行才能看到行为。 我把相同的代码放在一个控制台应用程序中,它在我的win 7机器上工作正常。

此外,我启用了telnet客户端和服务器窗口function,并能够通过命令提示符成功发送电子邮件。

我试了几件事来试图找出原因(没有用) –

  • 显式设置NetworkCredential并设置UseDefaultCredentials = false。 emailClient.Credentials = new System.Net.NetworkCredential(“username”,“pwd”,“Domain1”);

  • 将服务的Log On As选项更改为我的userid和pwd

  • From和To电子邮件地址是真实的,而不是虚拟地址(在我的真实代码中!)

我能找到的唯一区别是Windows服务安装在本地系统帐户下。 但是,更改登录应该会导致它使用我的身份validation详细信息/代码中指定的凭据。 我办公室的IT人员说,他看到的唯一区别是我的邮件是作为中继发送的(不确定这是什么意思作为从/到并在登录时更新到我的登录帐户并没有改变结果)

我看到被抓住的例外是:

抛出SMTPexception:System.Net.Mail.SmtpException:发送邮件失败。 —> System.Net.WebException:无法连接到远程服务器—> System.Net.Sockets.SocketException:试图以其访问权限XXX.XXX.XXX禁止的方式访问套接字System.Net.SService.ConnectSocketInternal上的System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)中的.XXX XX(布尔值connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult, Int32超时,exception和exception)

任何想法都表示赞赏!

我觉得它与Windows 7安全策略/function有关,希望可能就像更改默认设置一样简单。

您可以以当前用户身份运行服务。 只需在服务安装程序中选择USER,它就可以作为当前用户使用。 我今天得到了同样的错误,我找到了这个解决方案。 我希望它对任何人都有帮助。 在此处输入图像描述

我发现这是我们新工作笔记本电脑的安全政策,IT部门拒绝让我们改变它。 我们的测试服务器没有相同的问题,因为它不是Windows 7,所以我不能100%肯定。 尝试通过命令行发送电子邮件,看看你的电脑是否允许smtp。

在没有任何限制的win xp或Windows服务器机器上运行相同的代码工作正常