记一次SmtpClient发送邮件引发的系列问题
前提:公司同事离职,我接手同事负责的项目。
事件:某天公司的分析人员,说软件中的邮件发送功能不能使用,总是提示“邮件发送失败”。
本地能够正常发送,发布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 和其他的一些补丁包给合并到一个大的补丁包里了,就是这厮。

安装后,重启服务器,哆哆嗦嗦的测试了一下,竟然成功了。太尼玛的感动了!
在网上查询的时候要有耐心,每条记录都看看,也许就有对自己有用的信息了。再有就是,还是用谷歌吧,我好多东西搜出来的都是因为谷歌,度娘你在干什么。。。。。。
记一次SmtpClient发送邮件引发的系列问题的更多相关文章
- 利用System.Net.Mail 的SmtpClient发送邮件
原文:利用System.Net.Mail 的SmtpClient发送邮件 几个月前总结过关于Jmail发送邮件,当时用Jmail发送邮件发送速度有点慢(可能对Jmail了解不是很多).现在改为用微软提 ...
- SmtpClient发送邮件时附件名称乱码
在用户环境发现一个现象,使用System.Net.Mail.SmtpClient发送邮件,当附件名包含中文且长度较长时,最终的邮件里附件名会乱掉,写个简单的测试程序: var mail = new M ...
- .NET 通过SmtpClient发送邮件 提示 4.7.1 service unavailable try again later 解决办法
最近用C#的SmtpClient发送电子邮件碰到这个错误: 正在处理错误. 服务器响应为:4.7.1 Service unavailable - try again later 换了其他的SMTP服务 ...
- C# 使用 SmtpClient 发送邮件注意项
最近有邮件发送需求,使用 C# SmtpClient 对象发送邮件 , 报异常, 如下错误代码: 调整代码顺序后,发送邮件成功! 注意:一定要先设置 EnableSsl和UseDefaultCred ...
- C#使用SmtpClient发送邮件
目的:写一个可发送邮件的DLL. 原理: 例如A使用163邮箱发送邮件给B(qq邮箱).首先A会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到163的Smt ...
- SmtpClient发送邮件
使用第三方SMTP服务器来发送邮件.如网易: SmtpClient sc = new SmtpClient("smtp.126.com"); sc.Credentials = ne ...
- SmtpClient 发送邮件
利用SmtpClient 代码发送邮件. 简单测试代码: static void Main(string[] args) { MailMessage msg = new MailMessage(); ...
- C#使用SmtpClient发送邮件解决授权码配置问题
授权码,(新版邮箱在开启smtp权限设置时,会生成授权码)如果不做配置,客户端是不能发送邮件的 //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码 Smt ...
- asp.net利用SmtpClient发送邮件
using System; using System.Data; using System.Web.UI; using System.Data.OracleClient; using DBUtilit ...
随机推荐
- POJ 3264.Balanced Lineup-结构体版线段树(区间查询最值)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53721 Accepted: 25244 ...
- ANDROID NFC读M1卡
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.Cons ...
- HDU 6208 The Dominator of Strings【AC自动机/kmp/Sunday算法】
Problem Description Here you have a set of strings. A dominator is a string of the set dominating al ...
- 洛谷P2419 [USACO08JAN]牛大赛Cow Contest
对于一个能够确定名次的点,可以注意到,对于该点,入度和出度的数量加起来等于N-1(这样还是不够准确的确切的说是,能够到达这个点的数量和这个点能够到达的数量的和 floyd不仅可以求两个点之间的最短路径 ...
- linux-改变文件属主权限-chown
http://www.cnblogs.com/peida/archive/2012/12/04/2800684.html chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID: ...
- Java下String逗号数组和List<String>的互相转换
说明:很遗憾,组装的时候只能遍历. 方法: public static String listToString(List<String> list){ if(list==null){ re ...
- PHP线程安全和非线程安全的区别
Windows版的PHP从版本5.2.1开始有Thread Safe.这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. 从2000年10月20日发布的第一个Windows版的PHP3.0.1 ...
- perspective 的笔记
以前看到别人做的banner图,3d变化,很羡慕啊,一直不知道怎么做,直到看到了这个样式perspective,然后就知道怎么实现了 一个简单的例子,扫起 demo下在地址 http://fil ...
- kubernetes环境下私有仓库搭建
前期在客户那里搭建了基本运行环境,鉴于很多企业的环境都是内部网无法连接外部,因此搭建私有仓库是逃避不开的问题,按照网上的步骤搭建,虽然遇到一些问题,但还好都算容易解决了,下面大致把步骤记录一下便于下次 ...
- flask的配置设置的几种方式
Flask的配置对象(config)是一个字典(dict)的子类(subclass),所以你可以把配置用键值对的方式存储进去. 1.一些重要的配置,可以设置在系统环境变量里,又或者放到某个服务器里, ...