Pre*_*haA 5 c# email smtp windows-7 smtp-auth
我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是 - 电子邮件选项无法在任何Windows 7计算机上的win服务中运行.但是,完全相同的代码将在Win XP机器上完美地运行.警告,这不能作为控制台应用程序进行测试.它需要作为服务运行才能看到行为.我把相同的代码放在一个控制台应用程序中,它在我的win 7机器上工作正常.
此外,我启用了telnet客户端和服务器窗口功能,并能够通过命令提示符成功发送电子邮件.
我尝试了一些尝试并找出原因(没有工作) -
显式设置NetworkCredential并设置UseDefaultCredentials = false.emailClient.Credentials = new System.Net.NetworkCredential("username","pwd","Domain1");
将服务的"登录身份"选项更改为我的用户ID和密码
我能找到的唯一区别是Windows服务安装在本地系统帐户下.但是,更改登录应该会导致它使用我的身份验证详细信息/代码中指定的凭据.我办公室的IT人员说,他看到的唯一区别是我的邮件是作为中继发送的(不知道这是什么意思,当更新到我的登录时,从/到并登录帐户并没有改变结果)
我看到被抓住的例外是:
抛出SMTP异常: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超时,异常和异常)
任何想法都表示赞赏!
我觉得它与Windows 7安全策略/功能有关,希望可能就像更改默认设置一样简单.
我发现这是我们新工作笔记本电脑上的安全策略,但 IT 部门拒绝让我们更改它。我们的测试服务器没有同样的问题,当然它也不是 Windows 7,所以我不能 100% 确定。尝试通过命令行发送电子邮件,看看您的电脑是否允许使用 smtp。
相同的代码在没有任何限制的 win xp 或 windows 服务器计算机上运行时运行良好
| 归档时间: |
|
| 查看次数: |
6778 次 |
| 最近记录: |