在net中使用smtp发送邮件

上传人:第*** 文档编号:32954243 上传时间:2018-02-13 格式:DOC 页数:11 大小:76.50KB
返回 下载 相关 举报
在net中使用smtp发送邮件_第1页
第1页 / 共11页
在net中使用smtp发送邮件_第2页
第2页 / 共11页
在net中使用smtp发送邮件_第3页
第3页 / 共11页
在net中使用smtp发送邮件_第4页
第4页 / 共11页
在net中使用smtp发送邮件_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《在net中使用smtp发送邮件》由会员分享,可在线阅读,更多相关《在net中使用smtp发送邮件(11页珍藏版)》请在金锄头文库上搜索。

1、在.NET 中使用 SMTP 发送邮件 这是一篇转载,可能对大家很有用啊,放首页看看是否有参考价值。本文提到的方案仍然不能算是完全解决所有问题,最佳的 dotNET 下通过 SMTP(带验证)发送邮件的机制是什么,不知道大家有什么好的看法! 摘要 本文简单介绍了 SMTP 协议(RFC2554)发送邮件的过程,并讨论了在 .NET 中使用SMTP 发送邮件由简到繁的三种不同方案、各自可能遇到的问题及其解决办法。目录 简介 .NET 的 SMTP 类 使用 CDO 组件发送邮件 使用 Socket 撰写邮件发送程序 总结 更多的信息 简介邮件发送功能常常是许多.NET 应用,尤其是带网络功能的应

2、用中不可缺少的模块之一,本文就此介绍了使用.NET 的 SMTP 类库和另两种分别通过 CDO(Collaboration Data Objects)及 Socket 来实现发送邮件功能的方法。.NET 的 SMTP 类首先,我们来介绍一下.NET 类库种自带的 SMTP 类。在 .NET 中的System.Web.Mail 名字空间下,有一个专门使用 SMTP 协议来发送邮件的类:SmtpMail,它已能满足最普通的发送邮件的需求。这个类只有一个自己的公共函数-Send()和一个公共属性SmtpServer,如下图:您必须通过 SmtpServer 属性来指定发送邮件的服务器的名称(或 IP

3、 地址),然后再调用Send()函数来发送邮件。代码示例如下:(in C#)using System.Web.Mail;public void sendMail() trySystem.Web.Mail.MailMessage myMail=new MailMessage();myMail.From = ;myMail.To = ;myMail.Subject = MailTest;myMail.Priority = MailPriority.Low;myMail.BodyFormat = MailFormat.Text;myMail.Body = Test;SmtpMail.SmtpServ

4、er=smarthost; /your smtp server hereSmtpMail.Send(myMail); catch(Exception e)throw e; 您可以在 Send 函数的参数 MailMessage 对象中设置邮件的相关属性,如优先级、附件等等。除了以 MailMessage 对象为参数(如上述代码),Send 函数还可以简单的直接以邮件的 4 个主要信息(from,to,subject, messageText)作为字符串参数来调用。使用 CDO 组件发送邮件CDO 是 Collaboration Data Objects 的简称,它是一组高层的 COM 对象集合

5、,并经历了好几个版本的演化,现在在 Windows2000 和 Exchange2000 中使用的都是 CDO2.0 的版本(分别为 cdosys.dll 和 cdoex.dll)。CDOSYS 构建在 SMTP 协议和 NNTP 协议之上,并且作为 Windows2000 Server 的组件被安装,您可以在系统目录(如 c:winnt 或 c:windows)的 system32 子目录中找到它 (cdosys.dll)。CDO 组件相对于先前介绍的 SmtpMail 对象功能更为丰富,并提供了一些 SmtpMail类所没有提供的功能,如通过需要认证的 SMTP 服务器发送邮件等。下面一段

6、代码就展示了如何使用 CDO 组件通过需要认证的 SMTP 服务器发送邮件的过程:(in C#)public void CDOsendMail() try CDO.Message oMsg = new CDO.Message();oMsg.From = ;oMsg.To = ;oMsg.Subject = MailTest;oMsg.HTMLBody = Test;CDO.IConfiguration iConfg = oMsg.Configuration;ADODB.Fields oFields = iConfg.Fields;oFieldshttp:/ /sender mailoField

7、shttp:/ /email accountoFieldshttp:/ oFieldshttp:/ 代表 Anonymous 验证方式(不需要验证)/value=1 代表 Basic 验证方式(使用 basic (clear-text) authentication. /The configuration sendusername/sendpassword or postusername/postpassword fields are used to specify credentials.)/Value=2 代表 NTLM 验证方式(Secure Password Authenticatio

8、n in Microsoft Outlook Express)oFieldshttp:/ oMsg.Send();oMsg = null; catch (Exception e)throw e;注意:由于 Exchange2000 的 CDO 组件 cdoex.dll 会更新原有的 Windows2000的 CDO 组件 cdosys.dll,所以如果您希望继续使用 cdosys.dll,您必须先通过regsrv32.exe 卸载掉 cdoex.dll。使用 Socket 撰写邮件发送程序当然,如果您觉得 SmtpMail 不能满足您的需求,CDO 又不够直截了当,那就只能自己动手了;其实如果

9、您很熟悉 Socket 编程,自己写一个发送邮件的程序并不很难,以下就是一个例子。首先,我们简单介绍一下带验证的 SMTP 服务器如何使用 AUTH 原语进行身份验证,其详细的定义可以参考 RFC2554。具体如下:1)首先,需要使用 EHLO 而不是原先的 HELO。2)EHLO 成功以后,客户端需要发送 AUTH 原语,与服务器就认证时用户名和密码的传递方式进行协商。3)如果协商成功,服务器会返回以 3 开头的结果码,这是就可以把用户名和密码传给服务器。4)最后,如果验证成功,就可以开始发信了。下面是一个实际的例子,客户端在 WinXP 的 Command 窗口中通过telnet smtp

10、.263.NET 25命令连接到 263 的 smtp 服务器发信:220 Welcome to coremail System(With Anti-Spam) 2.1EHLO 263.NET250-192.168.30.29250-PIPELINING250-SIZE 10240000250-ETRN250-AUTH LOGIN250 8BITMIMEAUTH LOGIN334 VXNlcm5hbWU6bXlhY2NvdW50334 UGFzc3dvcmQ6bXlwYXNzd29yZA=235 Authentication successfulMAIL FROM:myaccount263.N

11、ET250 OkRCPT TO:myaccount263.NET250 OkData354 End data with .This is a testing email.haha.250 Ok: queued as AC5291D6406C4QUIT221 Bye上面的内容就是发信的全过程。其中与身份验证有关的主要是第九到第十四行:AUTH LOGIN 客户端输入334 VXNlcm5hbWU6 服务器提示 “Username:=bXlhY2NvdW50 客户端输入“myaccount=的 Base64 编码334 UGFzc3dvcmQ6 服务器提示“Password:=bXlwYXNzd2

12、9yZA= 客户端输入“mypassword= 的 Base64 编码235 Authentication successful 服务器端通过验证从上面的分析可以看出,在这个身份验证过程中,服务器和客户端都直接通过 Socket传递经过标准 Base64 编码的纯文本。这个过程可以非常方便的用 C#实现,或者直接添加到原有的源代码中。另外,有些 ESMTP 服务器不支持 AUTH LOGIN 方式的认证,只支持 AUTH CRAM-MD5 方式验证。但是这两者之间的区别只是文本的编码方式不同。实现此功能的源代码可以在 SourceForge.NET http:/sourceforge.NET/

13、projects/opensmtp-net/ 上找到下载。下面给出了一个简单的伪码:public void SendMail(MailMessage msg) NetworkStream nwstream = GetConnection();WriteToStream(ref nwstream, EHLO + smtpHost + rn);string welcomeMsg = ReadFromStream(ref nwstream);/ implement HELO command if EHLO is unrecognized.if (IsUnknownCommand(welcomeMsg)WriteToStream

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号