前提:公司同事離職,我接手同事負責的項目。
事件:某天公司的分析人員,說軟件中的郵件發送功能不能使用,總是提示“郵件發送失敗”。
本地能夠正常發送,發布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:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 目錄下的Machine.config中。重新打開系統發現能夠正常登錄,長舒一口氣。
可是郵件發送的問題還是沒有搞定呢?
繼續網上搜索,找到了這個補丁包叫 KB2183292 ,以為直接搜索就能夠找到下載的地方,結果我還是太年輕了。根本找不到。
功夫不負有心人啊,終於讓我發現了一點點的線索,
https://support.microsoft.com/zh-cn/kb/2468871
在這篇文章中,看到了關於 KB2183292 補丁包的信息,
原來KB2183292 和其他的一些補丁包給合並到一個大的補丁包里了,就是這廝。
安裝后,重啟服務器,哆哆嗦嗦的測試了一下,竟然成功了。太尼瑪的感動了!
在網上查詢的時候要有耐心,每條記錄都看看,也許就有對自己有用的信息了。再有就是,還是用谷歌吧,我好多東西搜出來的都是因為谷歌,度娘你在干什么。。。。。。