直击重点,用过SmtpClient的不知道有没有踩过坑,明明发邮件正常,但是发着发着就有部分没发出去,而且还不知道问题在哪?代码不变,发送到了一定的数量就开始失败了,然后过了几份后又开始可以发了。如果你也遇到这种情况了,那么我共享你看到这篇帖子说明问题可以解决了,因为我踩完坑。
正文:
首先看代码,是不是和我代码写的的一样。
SmtpClient client = new SmtpClient
{
Host = conig.MailHost,
Port = conig.Port,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
Credentials = new System.Net.NetworkCredential(conig.MailUserName, conig.MailPassWord)
};
如果你网上找发送邮件,基本上就算C V到这种,短期发现不了什么问题,等邮件量多了后,便会发现部分邮件发送失败,那么怎么解决呢?
然后我通过本地批量发送和官方的属性查看发现,官方的UseDefaultCredentials和EnableSsl的默认属性是False,没错,他默认属性是False。更加高效的是,SLL加密都为False了,他竟然能发送成功,加上凭证也为Flase,他也能发成功。这次真的坑,要么都发不出去,要么都发出去,发几份又失败几份这种是最恶心的,无从下手。
实际配置UseDefaultCredentials和EnableSsl的属性即可解决当前问题。
UseDefaultCredentials = true,
EnableSsl = true
//br 换行
新问题,大家是不是发现通过第三方库发送的邮件都没办法在邮箱里面看到发件信息,巧了,我也遇到了这个问题,那么我解决这个问题的前期第一时间就想到了,默认密送给发件人一份,那么发件人也能看到发件邮件了。
message.Bcc.Add(conig.MailUserName);
到这大家又想了,不对呀,看到邮件也是在收件箱看到的呀,不符合用户使用啊,而且发件和收件在一起看,严重影响的使用。哎,我也是这么认为的,通过我不断的被坑和资料寻找,终于发现了,没办法(如果大家有好办法也可以分享出来)
但是别急,==,我既然把问题抛出来,当然有平替的方法的,不知道大家用的什么邮箱服务,但是大同小异,接下来看操作。
可以通过制定邮箱的规则,将发件人为本人的邮件自动移动到发件箱,没错,就这么简单。
到这里另外提醒一个容易踩的坑点,记得邮件发完之后释放附件锁,不然,下次读取发送的时候就知道什么叫程序险恶了。
Thread.Sleep(1000);
//千万别删 一定要释放邮件附件锁
message.Attachments.Dispose();
释放之前等1秒,防止邮件还在列队导致释放失败。