可怕的ASP.NET邮件组件
这两天在研究ASP.NET的用户登录控件,在用PasswordRecovery这个控件时遇到了麻烦,就是邮件发不出去,也收不到。
我用过gmail,qq,126,sohu进行过测试。
按照MSDN的说法,先老老实实地在webconfig中配置了邮件发送要用的一些必须信息:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="testforms@sohu.com">
<network defaultCredentials="false" host="smtp.sohu.com" password="123456" port="25" userName="testforms@sohu.com"/>
</smtp>
</mailSettings>
</system.net>
上面的代码一看就知道是怎么回事了,就是指定一个SMTP服务器,然后给它一个账号,可以用这个账号来发送邮件。
其中的defaultCredentials属性需要注意,根据SMTP服务器的不同,它可能是false,也可能是true。
搞定webconfig后,我便进行测试。
使用GMAIL作为发送邮箱时,程序报错是这样的:
SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: 5.7.0 Must issue a STARTTLS command first. d4sm305328tib.28
声明一下,我所用来测试的邮箱都是可用的。
使用QQ邮箱时:
命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first !
使用126邮箱时:
邮箱不可用。 服务器响应为: Óû§±»Ëø¶¨
(据说06年前注册的126邮箱可以发送,但由于我没那种账号,故也无法验证真伪……)
使用搜狐邮箱时:
事务失败。 服务器响应为: 5.7.1 <chenru0576@gmail.com>: Relay access denied
(这个提示貌似不是搜狐SMTP的问题,而是说被要收的服务器拒绝,chenru0576@gmail.com是我拿来接收的邮箱)
以上是我测试PasswordRecovery的结果,我没写一句代码,发送邮件全是让这个控件自己完成。
邮件发送失败率100%
然后我自己手写代码,就是用System.Net.Mail.MailMessage与SmtpClient类进行发送。
MailMessage message = new MailMessage();
message.From = new MailAddress("testforms@sohu.com");
message.To.Add("chenru0576@gmail.com");
message.Subject = "test";
message.Body = "tttstest";
SmtpClient smtp = new SmtpClient("smtp.sohu.com");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential("testforms@sohu.com", "123456");
smtp.Send(message);
以上代码可以实现邮件发送,我同样对上面的四种邮箱进行测试,只有搜狐的邮箱可以拿来发送邮件,gmail和QQ邮箱都能够收到。
到了这里我就很纳闷了,为什么同样使用搜狐的邮箱,PasswordRecovery控件却发不出去,我真想看看它的源码是怎么写的,居然狗日的发不出去……
既然这样,将PasswordRecovery控件的邮件发送的那块代码换成自己写的代码不就行了?
确实如此。
新建一个类库,继承PasswordRecovery,重载它的OnSendingMail函数,写上自己的代码。
public class MyPswRecovery : PasswordRecovery
{
protected override void OnSendingMail(MailMessageEventArgs e)
{
e.Cancel = true;
SmtpClient smtp = new SmtpClient("smtp.sohu.com");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential("testforms@sohu.com", "123456");
smtp.Send(e.Message);
}
}
OK!
经实验,邮件确实可以发送了,我也能收到。
但是……
其中存在着一个非常可怕的缺陷,就是非常的不稳定,有时候能发成功,有时候却报错,两者比例大概2:1……
这样的邮件发送系统也太不可靠了吧……人家要做一个密码取回的操作,要填安全提问等单子好几遍,用户会怎么想?
于是我就考虑用本地机子做为SMTP服务器,这样是否会好一点?
实验证明,
it gets worse……
发送的过程中没报任何错误,但我用gmail,qq,126邮箱进行接受测试,只有gmail才能收到邮件,发给qq的邮件全被扔在本地的badmail文件夹里,而给126的则是宛如泥牛入海杳无音信……
太可怕了……
现在我对微软的mail组件有点绝望了,正在下JMAIL,如果比微软的好用的话,下半辈子的幸福就靠它了……
转载于:https://www.cnblogs.com/lolicon/archive/2009/02/26/1399050.html
可怕的ASP.NET邮件组件相关推荐
- Asp.net 邮件传输
Asp.net 邮件传输(转) 因为项目需要,我本来做的是通过密码问题找回用户忘记的密码,结果客户要邮件自动发送的那种找回密码,还要用自己的邮件服务器.那么我怎么办?还要留个邮件服务器接口,好难做啊, ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例 ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇
第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...
- ASP.Net分页组件1.0开发下载了...
ASP.Net分页组件1.0开发下载了...支持皮肤和自定义样式.热乎乎的,写的不好的地方指正出来啊... 开源免费的.希望大家多多支持... ASP.Net分页组件1.0开发下载了...支持皮肤和自 ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇
第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.N ...
- 使用Exchange反垃圾邮件组件解决内部仿冒邮件
最近一个朋友遇到一个很有意思的问题,在生产环境中我们装好Exchange之后,肯定需要配置外部邮件的收发.按照我们对邮件系统的理解,我们必须在default 接收连接器上的权限设置,允许匿名连接,才能 ...
- NET开发邮件发送功能的全面教程(含邮件组件源码)(
天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下. AD:2013云计算架构师峰会精彩课程曝光 ...
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2 ...
- [转].NET开发邮件发送功能的全面教程(含邮件组件源码)
转载自http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送 ...
最新文章
- 关于bootstrap的treeview不显示多选(复选框)的问题,以及联动选择的问题,外加多选后取值...
- Spring_Bean配置_生命周期_注解
- 英语发音规则---M字母
- android 单选按钮横置,input radio如何实现横向布局
- js中数组filter过滤奇偶数_JS filter()方法:根据指定条件过滤数组元素
- [新地址]VS2010详细下载地址!Yeah~!
- RHEL/Centos7下使用EPEL和REMI源
- Java面试题总结系列 Servlet
- Leap手心发射线,碰撞点用小球表示,并用Line Renderer画出来
- sprutcam 多机器人_Sprutcam工业机器人离线编程系统
- 图解WinHex使用入门
- C语言运算符和表达式题目练习
- Google趋势(Trends)有趣的关键词
- 143_iOS干货50_认识几个概念:跨域问题和内网穿透
- MATLAB变声器程序
- SwiftUI 使用Apple Visionkit构建文档扫描仪
- 问题 B: 结构体---职工信息结构体
- 深度学习系列笔记之统计基础
- Echarts中国地图不能显示南海诸岛的问题
- 志强分享:轻松实现日吸300+精准粉