zoukankan      html  css  js  c++  java
  • 利用OpenSmtp.Net发送需要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.结论
       经过两天的调试和思考,解决的不是一个很大的问题,但是我也从中获得了一个教训,思考问题,一定要灵活,不要太过于固定化,比如我错误的认为是对方防火墙的问题,而且这种思路被我错位的坚持了很久,其实在我们不能很好的解决一个问题的时候,与其费劲脑筋,不如反过来想想。
    附:openmail.dll/Files/jillzhang/OpenSmtp.rar
            Telnet到端口25以测试SMTP通信

  • 相关阅读:
    关于 SAP UI5 对服务器端渲染 Server Sider Render 的支持问题
    java基础_数组_数据类型_原码反码补码_进制转换_编码_shell
    java基础_==与equals,try catch finally return ,装箱与拆箱, 字符串
    Java基础_泛型详解
    java基础_吃透Java集合系列九:HashMap
    java基础_吃透Java集合
    java基础_TCP和UDP总结及常见面试题
    java基础_由i++引发的并发问题_volatile关键词详析
    SpringBoot:SpringBoot项目的配置文件放在Jar包外加载和jar包打成exe
    对docker拉取镜像的一个知识点弥补不足
  • 原文地址:https://www.cnblogs.com/jillzhang/p/626006.html
Copyright © 2011-2022 走看看