邮件:事务失败。 服务器响应为:DT:SPM 163 smtp

网友投稿 329 2022-11-04


邮件:事务失败。 服务器响应为:DT:SPM 163 smtp

几年前我做的一个项目,日发邮件最高峰时几十万。自以为对邮件发送方面已经有了一定认识,所以近期机缘巧合之下,又有项目需要发送邮件,不禁自信满满,暗自庆幸能不手到擒来乎?

不想老革命遇到新问题。我原先的邮件发送机制,是生成eml文件,然后扔到windows自带的smtp服务器的pickup目录下,系统即自动发送(见拙作:​​邮件发送一点心得​​)。

但今时今日,这些好像都是老皇历了。IIS7默认并没有SMTP,如果操作系统是server,还可以通过添加功能加上去,但WIN7就不行了。偏偏,我们的系统就部署在WIN7下。

我第一个应对之道是看WIN7能不能装那个自带的SMTP,结果是不行,死活没找到。

第二个办法是装个第三方的SMTP,找来找去,找到一个叫做什么FREE SMTP的,装上去以后,打开看,好像忒简单了点。根本没有啥PICK目录的,应该是只能通过代码,搞什么几次握手之类的方法来进行调用。我很烦这个东西。

最后,决定还是直接使用smtp.163.com。网上例子比比皆是。

public interface IEmail{ bool Send(EmailParam param); string Mess { get; }}public class EmailParam{ public string From { get; set; } public string To { get; set; }//接收人;多个邮箱用分号隔开 public string CC { get; set; }//抄送;多个邮箱用分号隔开 public string Subject { get; set; }//标题 public string Body { get; set; }//邮件正文}public class Sender : IEmail{ SmtpClient client; public Sender() { // // // string host = ConfigurationManager.AppSettings["eml_host"]; string account = ConfigurationManager.AppSettings["eml_account"]; string pwd = ConfigurationManager.AppSettings["eml_pwd"]; client = new SmtpClient(); client.Host = host; client.UseDefaultCredentials = false; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Credentials = new System.Net.NetworkCredential(account,pwd); client.Port = 25; } public string Mess { get; set; } public bool Send(EmailParam param) { MailMessage mail = new MailMessage(); mail.From = new MailAddress(param.From); getCollection(mail.To,param.To); getCollection(mail.CC, param.CC); mail.Subject = param.Subject; mail.Body = param.Body; mail.SubjectEncoding = Encoding.UTF8; mail.BodyEncoding = Encoding.UTF8; mail.Priority = MailPriority.Normal; mail.IsBodyHtml = true; mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; try { client.Send(mail); } catch(Exception ex) { Mess = ex.Message; return false; } return true; } MailAddressCollection getCollection(MailAddressCollection collection,string arstring) { if (!String.IsNullOrEmpty(arstring)) { string[] ar = arstring.Split(';'); foreach (string item in ar) { if (String.IsNullOrEmpty(item)) continue; collection.Add(item); } } return

使用单元测试进行调用:

[TestMethod()]public void SendTest(){ IEmail sender = new Sender(); bool ok = sender.Send(new EmailParam() { Subject = "邮件测试7", Body = "Hello World!", From = "chendaqu@163.com", To = "178879771@qq.com;461198190@qq.com", }); Assert.AreEqual(true, ok);}

结果刚开始非常顺利,都能收到邮件;但该单元测试运行了几次以后,就发送失败了。提示:

错误:邮件:事务失败。 服务器响应为:DT:SPM 163 smtp11,D8CowACXNqusR1pYQe3vGA--.16469S2 1482311598,please see 以上就是垃圾。这个问题等于没解决。163的SMTP一言不合就将你的邮件当成垃圾邮件,直到第二天才解封。但是很奇怪,采用foxmail作为客户端来发送同样的邮件,却没有问题,说到底还是代码的问题?(outlook没试过,估计也不会有问题)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:配置tjxCold(idea效率插件)的模版教程详解
下一篇:银行联行号查询API(银行联行行号查询系统)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~