这两天在研究ASP.NET的用户登录控件,在用PasswordRecovery这个控件时遇到了麻烦,就是邮件发不出去,也收不到。

我用过gmail,qq,126,sohu进行过测试。

按照MSDN的说法,先老老实实地在webconfig中配置了邮件发送要用的一些必须信息:

Code
    <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类进行发送。

Code
        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函数,写上自己的代码。

Code
    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邮件组件相关推荐

  1. Asp.net 邮件传输

    Asp.net 邮件传输(转) 因为项目需要,我本来做的是通过密码问题找回用户忘记的密码,结果客户要邮件自动发送的那种找回密码,还要用自己的邮件服务器.那么我怎么办?还要留个邮件服务器接口,好难做啊, ...

  2. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  3. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续

    ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例 ...

  4. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...

  5. ASP.Net分页组件1.0开发下载了...

    ASP.Net分页组件1.0开发下载了...支持皮肤和自定义样式.热乎乎的,写的不好的地方指正出来啊... 开源免费的.希望大家多多支持... ASP.Net分页组件1.0开发下载了...支持皮肤和自 ...

  6. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

    第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.N ...

  7. 使用Exchange反垃圾邮件组件解决内部仿冒邮件

    最近一个朋友遇到一个很有意思的问题,在生产环境中我们装好Exchange之后,肯定需要配置外部邮件的收发.按照我们对邮件系统的理解,我们必须在default 接收连接器上的权限设置,允许匿名连接,才能 ...

  8. NET开发邮件发送功能的全面教程(含邮件组件源码)(

    天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下. AD:2013云计算架构师峰会精彩课程曝光 ...

  9. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2 ...

  10. [转].NET开发邮件发送功能的全面教程(含邮件组件源码)

    转载自http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送 ...

最新文章

  1. 关于bootstrap的treeview不显示多选(复选框)的问题,以及联动选择的问题,外加多选后取值...
  2. Spring_Bean配置_生命周期_注解
  3. 英语发音规则---M字母
  4. android 单选按钮横置,input radio如何实现横向布局
  5. js中数组filter过滤奇偶数_JS filter()方法:根据指定条件过滤数组元素
  6. [新地址]VS2010详细下载地址!Yeah~!
  7. RHEL/Centos7下使用EPEL和REMI源
  8. Java面试题总结系列 Servlet
  9. Leap手心发射线,碰撞点用小球表示,并用Line Renderer画出来
  10. sprutcam 多机器人_Sprutcam工业机器人离线编程系统
  11. 图解WinHex使用入门
  12. C语言运算符和表达式题目练习
  13. Google趋势(Trends)有趣的关键词
  14. 143_iOS干货50_认识几个概念:跨域问题和内网穿透
  15. MATLAB变声器程序
  16. SwiftUI 使用Apple Visionkit构建文档扫描仪
  17. 问题 B: 结构体---职工信息结构体
  18. 深度学习系列笔记之统计基础
  19. Echarts中国地图不能显示南海诸岛的问题
  20. 志强分享:轻松实现日吸300+精准粉

热门文章

  1. ubuntu12.04.4安装搜狗输入法
  2. 入职 6 个月,被裁员。。。
  3. 亿级流量架构服务限流,写得太好了!
  4. Redis 如何存储上亿级别的用户状态?
  5. 一个 Java 方法,最多能定义多少参数?
  6. Linux 正在吞噬 Windows 和 Chrome OS!
  7. 这个时代,开发简单多了
  8. java 浅堆 深堆_【深入浅出-JVM】(57):深堆、浅堆
  9. Linux进阶之Jenkins持续集成介绍及安装演示
  10. shell基础之变量及表达式