.NET环境下几种不同的邮件发送解决方案

    技术2022-05-11  110

    1、使用outLook提供的发送如:我见过的用友软件U8生产制造(演示版),其中的邮件功能就是通过调用outLook的ActiveX 组件优点:开发简单缺点:依赖outlook组件,SMTP 邮件服务

    邮件发送的代码如下:Private Sub Send()        Dim outObj As New Outlook.Application()        Dim Item As Outlook.MailItemClass        Item = outObj.CreateItem(0)        Item.To = "lihonggen0@163.com "        Item.Subject = "hello"        Item.Body = "hell"        Item.Attachments.Add("C:/abc.txt")        Item.Send()End Sub参考:使用 Microsoft Outlook 2002 开发解决方案http://www.microsoft.com/china/msdn/library/dndotnetout2k2/html/odc_oldevsol.asp

    2、WEB开发,在ASP.NET中引用System.Web.Mail类System.Web.Mail 命名空间包含使您可以使用 CDOSYS(Windows 2000 的协作数据对象)消息组件来构造和发送消息的类。邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。此命名空间中的类可以在 ASP.NET 或任何托管应用程序MailAttachment提供用于构造电子邮件附件的属性和方法。MailMessage提供用于构造电子邮件的属性和方法。SmtpMail提供用于使用 Windows 2000 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法。邮件可以通过 Microsoft Windows 2000 中内置的 SMTP 邮件服务或任意 SMTP 服务器来传送。System.Web.Mail 命名空间中的类型可以在 ASP.NET 或任何托管应用程序使用。Smtp服务器的设置,现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务,在发送邮件的时候,需要验证用户信息,考虑Smtp用户验证问题如果Smtp服务器在本地计算机,发送速度很快的,基本上不用担心,如果不是本地服务器,那么发送的时候最好不要以此太多,一是速度问题,二是以此发送太多邮件,Smtp服务器可能认为是垃圾邮件而拒绝服务代码如下:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim mailObj As New MailMessage()        Dim smtp As SmtpMail        '定义SMTP服务器的名称         smtp.SmtpServer = "smtp.XXX.com"        '定义邮件的发送地址         mailObj.From = "lihonggen@XXX.com"        '定义邮件的接收地址         mailObj.To = " AAA@XXX.com"        '定义邮件的暗送地址         mailObj.Bcc= "aa@sina.com"        '定义邮件的抄送地址         mailObj.Cc = "aaa@sina.com"        '定义邮件的主题         mailObj.Subject = "主题"        '定义邮件的主体         mailObj.Body = "邮件主体!"        '邮件以 HTML的格式发送         mailObj.BodyFormat = MailFormat.Html        '定义邮件的有限级,在此设定为高         mailObj.Priority = MailPriority.High        '给发送的邮件附加上一个附件         mailObj.Attachments.Add(New MailAttachment("c:/aa.doc"))        smTp.Send(mailObj)    End Sub3、在VB.NET或C#开发Windows 应用程序中使用System.Net.Sockets 也是基于SMTP协议 一、SMTP协议简介 1、 客户端通过服务器的25端口建立TCP/IP连接 服务器端: 220 server.com Simple Mail Transfer Service Ready 2、 客户端使用“HELO”命令标识发件人 客户端:HELO server.com 服务器端:250 server.com 3、 客户端发送MAIL命令,服务器端以OK作为响应表明准备接收 客户端: MAIL FROM: <A@B.com> 服务器端: 250 OK 4、 客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件 客户端:RCPT TO: <c@d.com> 服务器端:250 OK 5、 协商结束后用命令DATA发送发送邮件 客户端:DATA 服务器端:354 Start mail input: end with <CRLF>.<CRLF> 6、 客户端以.表示结束输入内容一起发送出去 客户端:Subject: <CRLF> 内容<CRLF> .<CRLF> 7、客户端用QUIT命令退出。 客户端:QUIT 服务器端:250 server.com closing transmission channel 优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发 缺点:程序量相对较多, 发送邮件的代码如下:

    Dim sendData As String Dim szData As Byte() Dim CRLF As String CRLF = "/r/n" '创建与服务器25端口的连接 Dim SmtpServ As New TcpClient(txtsmtp.Text, 25) lstlog.Items.Clear() '显示服务器初始信息 Dim NetStrm As NetworkStream NetStrm = SmtpServ.GetStream() Dim RdStrm As New StreamReader(SmtpServ.GetStream()) If RdStrm.ReadLine() <> "" Then lstlog.Items.Add(RdStrm.ReadLine()) ' sendData = "HELO server " + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '标志发件人 sendData = "MAIL FROM: " + "<" + txtfrom.Text + ">" + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '标志收件人 sendData = "RCPT TO: " + "<" + txtTo.Text + ">" + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '准备发送内容 sendData = "DATA " + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '发送主题 sendData = "SUBJECT: " + txtsub.Text + CRLF '发送内容 sendData = sendData + txtmsg.Text + CRLF '结束发送 sendData = sendData + "." + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '退出 sendData = "QUIT " + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '关闭连接 NetStrm.Close() RdStrm.Close() lstlog.Items.Add("连接关闭") lstlog.Items.Add("发送成功")

    大家还可以参考:使用C# 创建邮件发送组件(SMTP) http://www.aspcool.com/lanmu/browse1.asp?ID=968&bbsuser=csharp 4、IIS SMTP自带的基本的发信组件CDONTS 你不必专门下载,微软已经提供了这个组件,只要安装了2000,NT的SMTP就会有的。 优点:组件由操作系统自带 缺点:功能比较差,可扩展性不强

    Mymail = CreateObject("CDONTS.NewMail") Mymail.From = *** '信件发送者信箱 Mymail.To = *** ‘信件接收者信箱 Mymail.CC = *** '抄送 Mymail.BCC = *** ’密件发送 Mymail.Subject = *** ‘信件主题 Mymail.Body = *** ’信件正文 '设置优先级,0-不重要,1-一般,2-重要。 Mymail.Importance = 2 Mymail.Send() Mymail = Nothing

    5、使用JMail组件 Jmail具有以下特点: (1)可以发送附件; (2)详细日志能力,便于你查看问题所在; (3)设置邮件发送的优先级; (4)支持多种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。这是个免费的组件。 (5)密件发送/(CC)抄送/紧急信件发送能力; (6)最关键的就是--免费的组件,不必发钱,所以非常值得使用。 网站:http://www.dimac.net/,目前版本是4.3 JMail组件的常用属性: Body   邮件正文 Logging   调用Log记录,供Debug用 Priority   邮件的优先程度,从1到5 Sender   发件人 ServerAddress   SMTP服务器的IP地址或名称 Subject   邮件标题 JMail组件的常用方法: AddAttachment   指定附件文件 AddRecipient   加入一个收件人 AddRecipientBCC   隐藏的副本抄送,只有发件人和BCC收件人知道。 AddRecipientCC   副本抄送 Execute   送出邮件 了解必要的属性及方法后,余下的部分接收使用者输入的Email,当成参数传给AddRecipient方法,然后根据需要填上其余属性,最后以Execute方法寄出。例如:

    Dim JMail JMail = Server.CreateObject("JMail.SMTPMail") JMail.Logging = True JMail.ServerAddress = "202.96.144.48" JMail.Sender = "lihonggen0@163.com" JMail.Subject = "subject." JMail.Body = "body." JMail.AddRecipient("bbbb@163.com") JMail.AddAttachment("c:/go.gif") JMail.Priority = 3 JMail.Execute() JMail = Nothing

    总结:选择何种方案,视程序的用途和需求而定,本文例出的几种方案,供大家参考。例如用友软件U8,调用outlook组件,一样整合到自己的软件中。我编写的管理系统,自己写组件(SMTP),功能同样强大,不过Coding的时间就长了! 


    最新回复(0)