利用OpenSmtp.Net发送需要smtp验证的邮件

smtp

  1.引言

    下周,需要做一个发送电子邮件的模块,磨刀不误砍柴工,周末在家里先做了一下测试,微软在,net1.1中有System.Web.Mail空间,这个命名空间下可以发送不带smtp验证的电子邮件,不过现在网络上很少再有不需要smtp验证的,所以这个命名空间下的类应该算是比较鸡肋。 于是找到opensmtp.net这个开源项目,这个项目的admin是园子里面的"我得女儿好漂亮",真诚感谢一下。

  2.本文宗旨

    本文并不是介绍openmail.net的使用方法,该开源项目是一个非常正规的项目,它自己具有详细的文档和使用方法。本文主要阐述再使用OpenMail或者.net 2.0里面的SmtpClient的时候可能遇到的问题,这个问题跟你的运行环境有关系,如果你恰巧遇到这样问题的时候,网上相关资料也比较少。我在下面就描述一下我遇到的问题以及归纳出来的解决办法

  3、在使用OpenMail或者SmtpClient中可能遇到的问题

   1)在发送电子邮件的时候,提示“您主机中的软件放弃已经建立的连接”

    这个是我遇到的最为头疼的问题,因为他昨天晚上调到12点,搞的我差点没疯掉。起初,我知道一定是防火墙引起的问题,但是我把本地Windows XP内置防火墙关闭之后,问题依旧。但是无论我是否关闭防火墙,outlook都能正常接收和发送电子邮件,我用的是smtp.126.com,我直接telnet smtp.126.com 25或者在软件中TcpClient client = new TcpClient("smtp.126.com",25);都提示无法连接。而outlook却能发送邮件,我netstat -n ,本机与smtp.126.com 25端口的tcp连接在outlook发送电子邮件的时候也建立了,但为什么outlook能建立连接,我的软件或者telnet为何不能?如何能让我的软件和telnet能连接smtp 服务器的25端口?

  2)第一个问题着实让我浪费了很多时间,而且浪费了n多脑细胞,不过还好终于解决了,第二个问题是在发送电子邮件的时候,邮件的正文产生乱麻的问题,这个问题我看网上有人在问,不过很好解决。

  4.解决问题的步骤和方法,以及经验教训

   1)对于第一个问题,我的确犯了一个方向性的错误,那就是我关闭了本机防火墙之后,我错误的认为导致我不能正常连接smtp服务器的原因在于smtp服务端的防火墙,而且我本地outlook能正常发送邮件极大的误导了我的思路,我错误的任务,outlook能发送,那么表示数据一定能从我本地出去。错误只能出现在服务端,我猜想可能outlook有特殊的技术能穿透smtp服务器的防火墙,但是我查阅了穿透防火墙的技术,如果要防火墙,一般的做法是HttpChannel,其实http请求本身不能穿透防火墙,但是一般防火墙不阻止对80端口的连接,smtp.126.com的80端口确也是关闭的。这样的思路导致我在错误的方向用了很多功。

  今天早晨起来,我决定换个思路看看,我把本地防火墙关掉,还是不行,后来我看到了我的macfee,是不是这厮搞得鬼那,我打开virtusScan Console,o,my god,里面的确有一项On-Delivery E-Mail  Scanner ,我关闭它,发现还是不行,我有点失望了,不过还不甘心,再找,终于又发现了,在Access Protection里面,有一个ports to block,里面有25端口,日志文件保存在"AccessProtectionLog.txt",打开文件后有许多失败记录,去掉25端口阻塞,禁止On-Delivery E-Mail  Scanner ,问题解决

  2) 对于第二个问题,只需要更改编码就可以了,在openmail.net里面设置MailMessage.CharSet,如果在中国,设置"gb2312"一般可以解决这个问题

  5.结论

   经过两天的调试和思考,解决的不是一个很大的问题,但是我也从中获得了一个教训,思考问题,一定要灵活,不要太过于固定化,比如我错误的认为是对方防火墙的问题,而且这种思路被我错位的坚持了很久,其实在我们不能很好的解决一个问题的时候,与其费劲脑筋,不如反过来想想。

时间: 2024-10-04 18:49:43

利用OpenSmtp.Net发送需要smtp验证的邮件的相关文章

在asp.net中发送带有smtp验证的邮件

asp.net|smtp 在.Net Framework 1.1中,对这一需求有了考虑,在MailMessage组件中增加了Fields集合易增加ESMTP邮件服务器中的寄送者身份验证的问题.不过,这一方法仅适用于.Net Framework 1.1,不适用于.Net Framework 1.0版本.带有寄送者身份验证的邮件发送程序如下: <%@ Import Namespace="System.Web.Mail" %><script runat="serv

c#发送需要smtp认证的邮件

smtp -------------------------调用类 -----------------------------------private void SendMaill(string username,string superpassword,string email) { string body="尊敬的用户:<br><br>您好!<br><br>  你的登录用户名是:"+username+"这是你的超级密码:&

发送失败-SMTP中的邮件发送问题

问题描述 SMTP中的邮件发送问题 connect(ui.pb_send,SIGNAL(clicked()),this,SLOT(sendmail(Socket))); void SMTPclient::sendmail(QTcpSocket * socket) { qDebug("1111111111111111111111111111"); sendcommand(socket,"HELO:<" + ui.le_SMTP->text() + &quo

Jmail中避过smtp验证的一法

现在几乎所有的免费信箱都需要smtp验证,除非发到自己服务器上的,比如21cn.com的邮件只能发到21cn.com.使用jmail的时候避免无法发送的方法:我以21cn.com为例,jmail.send="my@21cn.com" '这个地址你可以填写自己的,也可以填写莫须有的,但是不能写错jmai.addrecipient "somebody@somewhere.com"  '这个地址是真正要发送的地址这样就可以绕开smtp验证了

一段VB.NET代码,生成邮件,发送邮件,支持SMTP验证用户名密码.

smtp|发送邮件 可以生成邮件,可以发送邮件,稍做修改就可以写成一个com组件,在ASP里调用.以后我会整理成一个完整的. -------------------------------------------------------------------------------- '-------------------------------------------------'生成基本邮件格式(包括附件),发送邮件到SMTP服务器,'只能发送到发件人SMTP服务器(需验证),直接投递功

C#写的支持SMTP验证的发送邮件组件(1)

smtp|发送邮件 这是我学C#后写的第一个比较拿得出手的东西,肯定有很多错误之处,还望各位高手指正. 写它的原因就是.net自带的SmtpMail不支持SMTP认证(说句题外话,我真很奇怪, 从ASP到ASP.NET,M$的邮件组件老是慢半拍,ASP中的CDONTS难得能有正常使用的, 到了.NET时代,SMTP服务器基本都得验证才能用,.NET的SmtpMail又不支持验证, 真是---),我费了好几天功夫才弄明白怎样把原来的Jmail怎么弄到.NET下用, 可用起来还是比较麻烦,正好买了本

Domino下如何启用SMTP验证及创建允许匿名验证

我们都知道,作为一个企业的管理员是一件很爽的事,为什么爽呢,那是因为企业管理员的权限很大,所有用户的数据对于管理员来说是透明的,同时也是一件让人感受压力的一件事,那为什么这么说呢,就拿邮件来说吧,很多用户会在使用中发现很多问题,比如邮件发送失败,无法接受某些邮件,甚至企业内的邮件系统备受攻击,导致邮件系统瘫痪,这样一来管理员的压力是相当大的,还有一个可能就是Domino下用户可以通过自己的有效账户及密码去验证企业内其他用户的邮箱地址带发邮件,这个问题确实比较头疼,也比较危险,那个员工不高心了,用

利用.net来发送即时消息:)

用了我一下午的时间终于写完并整理好了利用.net来发送即时消息的材料(当然了,还有上午的数据库设计:)    数据库设计:info表:id fromstu_id tostu_id content term其中id是主键,fromstu_id是发送信息的用户的学号(这是和我做的学友录连在一起的),tostu_id是接受信息的用户的学号,content是消息的内容,term是判断是否为新消息.下面的代码家在校友录中的if not ispostback中 '/////////////////////判

使用ESMTP(SMTP)进行邮件发送

smtp 使用ESMTP/SMTP进行邮件发送,遇到一个问题: 假如附件为图片gif文件,发送没有问题.但是接收后,无法显示图片.敬请高手指点!!!!! /* * Created on 2004-12-21 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ /** * @author Adminis