记一次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 ...
随机推荐
- MySQL的数据类型和建库策略详解
无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构.充分利用空间是十分必要的.这就要求我们对数据库系统的常用数据类型有充分的认识.下面我就将我的一点心得写出来跟大家分享. 一.数字 ...
- Python练习——同时安装python2 与 python 3如何选择不同解释器运行脚本
如果同时安装了python 2 和python 3 那么我们需要在运行时指定解释器 如下: 其中py -2 ex1.py指定了解释器的版本,以及打开的文件 如果使用 py-3 ex1.py则使用了py ...
- cogs 服务点设置
3. 服务点设置 ☆ 输入文件:djsa.in 输出文件:djsa.out 简单对比时间限制:1 s 内存限制:128 MB 问题描述为了进一步普及九年义务教育,政府要在某乡镇建立一所 ...
- 数据库的语言——SQL
DBMS 是一种系统软件,我们要与它交互的时候就必须使用某种语言,在数据库发展初期每一种DBMS 都有自己的特有的语言,不过逐渐的SQL 成为了所有DBMS 都支持的主流语言.SQL 是专为数据库而建 ...
- [BZOJ 3144] 切糕
Link: BZOJ 3144 传送门 Solution: 发现要把点集分成不连通的两部分,最小割的模型还是很明显的 首先我们将原图转化为$R+1$层,从而将点权化为边权 关键还是在于建图是怎么保证$ ...
- 【二分答案】【最大流】bzoj3993 [Sdoi2015]星际战争
二分Time,S->炮[i]:Time*b[i] 炮[i]->机器人[i]:INF 机器人[i]->T:a[i]. 判断是否满流. #include<cstdio> #i ...
- Exercise02_07
import javax.swing.JOptionPane; public class Years { public static void main(String[] args){ String ...
- Matlab设置形状大小
x=0:10; y=2*x; plot(x,y,'-*','linewidth',0.5,'markersize',6)%%默认线宽为0.5,点大小为6 说明:调整线宽也可改变点的形状,这实际上是通过 ...
- Debian6 安装Kscope(也适用于Ubuntu)
参考:http://soft.chinabyte.com/os/134/12307634.shtml kscope1.6.2在这里下载,下载后解压出kscope-1.6.2.tar.gz. 在ubun ...
- SecureCRT的一些问题解决
按下退格键发送删除命令 设置缓冲 拷贝与粘贴 多标签切换 ctrl + tab . 如果同时按下shift,可以方向切换