前提:公司同事离职,我接手同事负责的项目。
事件:某天公司的分析人员,说软件中的邮件发送功能不能使用,总是提示“邮件发送失败”。
本地能够正常发送,发布WCF到服务器IIS上,再调用WCF发现就提示“发送失败”,有没有什么特别的提示。服务器是Server 2008 R2系统,我本机是WIN 7。于是猜测是否是WCF发布的问题,将WCF拷贝到我本地电脑,发现邮件能够正常发送,忽然感觉无比蛋疼!
于是猜测是否是SMTP服务有问题呢?
果断放弃126的邮箱,使用163的邮箱,同时也将邮箱的服务更改为 “smpt。163.com”,本地测试没问题,服务器测试还是发送失败。
尼玛,没办法又试了试QQ邮箱,同样是本地可以,服务器不可以。无奈之下只能使用一个笨的方法,将发送邮件的代码拷贝出来,写了一个测试的DEMO,放在服务器上。
结果发现,163、126、QQ邮箱在发送邮件上都没有问题。就在我百般无奈的时候,发现以前邮件可以发送,赶紧询问同事是否知道问题所在,给同事一说,他说我知道这个问题。内心一阵窃喜,终于要搞定了,就在这时候,他说了一句,我也是发现服务器上有时候是发送失败的,但是没有找到原因,顿时凌乱在了风中。。。
没办法,BUG还未消除,同志仍要努力呀!
又打了N遍LOG发现总是提示数组越界,可是根本就没有越界的地方呀!无奈之下,发现以前有的邮件是可以发送的,仔细分析了一下,猜测是否是邮件中附件的大小会影响发送结果呢?想到这,马上去实验,果然如同我的猜测,小的附件没问题,大的附件有问题。于是想是否是SMTP服务有什么配置,可是百度了N久,都没有什么收获。
就在我准备放弃,翻了N页记录后终于发现了一篇博客,说是微软的BUG,
使用"System.Net.Mail.SmtpClient"类,如果是大于 3 MB 的电子邮件附件发送一封电子邮件,就会报错。
顿时,感动的眼泪哗哗的。
https://support.microsoft.com/zh-cn/kb/2183292
看到这,顿时信心百倍,雄赳赳气昂昂的,准备要搞定这个问题了。点击下载链接,发现已经没有这个修复补丁包了。找不到补丁包,我就猜测是否是.NET Framework 4.5中已经将这个问题给修复了呢,于是我就又在服务器上装了4.5,然并卵啊然并卵。就在这时候我做了一个很愚蠢的工作,把.NET Framework 4.5给卸载了,卸载了.NET Framework 4.5后发现4.0也统统都给卸载了。SHIT!!! 于是又赶紧装上.NET Framework 4.0,重新配置好,结果尼玛果然出大事了,整个系统登录不上去了。
内心非常焦急,怎么办怎么办马上要下班了啊。。。。
冷静下来仔细分析,卸载了.NET Framework 引发的问题,发现系统报错“Unable to find the requested .Net Framework Data Provider”,我数据库用的是Oracle数据库,而且ODAC安装也没问题,卸载后却说找不到,还是得需要上网查寻呀!
http://www.dotblogs.com.tw/yc421206/archive/2014/06/11/145502.aspx
看到这篇文章后,才知道,在安装ODAC的时候会向 Machine.config 中的 DbProviderFactories写入 Oracle.DataAccess.DLL 的信息,找到问题后,复制DbProviderFactories到我的电脑
C:WindowsMicrosoft.NETFrameworkv4.0.30319Config 目录下的Machine.config中。重新打开系统发现能够正常登录,长舒一口气。
可是邮件发送的问题还是没有搞定呢?
继续网上搜索,找到了这个补丁包叫 KB2183292 ,以为直接搜索就能够找到下载的地方,结果我还是太年轻了。根本找不到。
功夫不负有心人啊,终于让我发现了一点点的线索,
https://support.microsoft.com/zh-cn/kb/2468871
在这篇文章中,看到了关于 KB2183292 补丁包的信息,
原来KB2183292 和其他的一些补丁包给合并到一个大的补丁包里了,就是这厮。
安装后,重启服务器,哆哆嗦嗦的测试了一下,竟然成功了。太尼玛的感动了!
在网上查询的时候要有耐心,每条记录都看看,也许就有对自己有用的信息了。再有就是,还是用谷歌吧,我好多东西搜出来的都是因为谷歌,度娘你在干什么。。。。。。