.NET环境下几种不同的邮件发送解决方案
2007-08-26 05:01:11   来源:   评论:0 点击:

1、使用outLook提供的发送

如:我见过的用友软件U8生产制造(演示版),其中的邮件功能就是通过调用outLook的ActiveX 组件

优点:开发简单

缺点:依赖outlook组件,SMTP 邮件服务

邮件发送的代码如下:


  Private Sub Send()

    Dim outObj As New Outlook.A lication()

    Dim Item As Outlook.MailItemCla 

    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.a 

2、WEB开发,在A .NET中引用System.Web.Mail类

System.Web.Mail 命名空间包含使您可以使用 CDOSYS(Windows 2000 的协作数据对象)消息组件来构造和发送消息的类。邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。此命名空间中的类可以在 A .NET 或任何托管应用程序

MailAttachment提供用于构造电子邮件附件的属性和方法。

MailMe age提供用于构造电子邮件的属性和方法。

SmtpMail提供用于使用 Windows 2000 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法。

邮件可以通过 Microsoft Windows 2000 中内置的 SMTP 邮件服务或任意 SMTP 服务器来传送。System.Web.Mail 命名空间中的类型可以在 A .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 MailMe age()

 

    Dim smtp As SmtpMail

 

    '定义SMTP服务器的名称

    smtp.Smt erver = " mtp.163.com"

    '定义邮件的发送地址

    mailObj.From = "lihonggen@163.com"

 

    '定义邮件的接收地址

    mailObj.To = " lihonggen0@163.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:\lihonggen.doc"))

    smTp.Send(mailObj)

  End Sub

3、在VB.NET或C#开发Windows 应用程序中使用System.Net.Sockets

也是基于SMTP协议

一、SMTP协议简介

1、客户端通过服务器的25端口建立TCP/IP连接

服务器端: 220 server.com Simple Mail Tra fer Service Ready

2、客户端使用“HELO”命令标识发件人

客户端:HELO server.com

服务器端:250 server.com

3、客户端发送MAIL命令,服务器端以OK作为响应表明准备接收

客户端:MAIL FROM: <A@B.com>

服务器端:250 OK

4、客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件

客户端:RCPT TO: <d@e.com>

服务器端:250 OK

5、协商结束后用命令DATA发送发送邮件

客户端:DATA

服务器端:354 Start mail i ut: end with <CRLF>.<CRLF>

6、客户端以.表示结束输入内容一起发送出去

客户端:Subject: <CRLF>

内容<CRLF>

.<CRLF>

7、客户端用QUIT命令退出。

客户端:QUIT

服务器端:250 server.com closing tra mi ion cha el

优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发

缺点:程序量相对较多,发送邮件的代码如下:


    Dim sendData As String

    Dim szData As Byte()

    Dim CRLF As String

    CRLF = "\r\ quot;

 

    '创建与服务器25端口的连接

    Dim Smt erv As New TcpClient(txtsmtp.Text, 25)

    lstlog.Items.Clear()

 

    '显示服务器初始信息

    Dim NetStrm As NetworkStream

    NetStrm = Smt erv.GetStream()

 

    Dim RdStrm As New StreamReader(Smt erv.GetStream())

    If RdStrm.ReadLine() < gt; " quot; 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: " + " lt quot; + txtfrom.Text + " gt quot; + CRLF

    szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

    NetStrm.Write(szData, 0, szData.Length)

    lstlog.Items.Add(RdStrm.ReadLine())

 

    '标志收件人

    sendData = "RCPT TO: " + " lt quot; + txtTo.Text + " gt quot; + 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 = " UBJECT: " + 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.a cool.com/lanmu/browse1.a ?ID=968&am user=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   发件人

ServerAddre    SMTP服务器的IP地址或名称

Subject   邮件标题

JMail组件的常用方法:

AddAttachment   指定附件文件

AddRecipient   加入一个收件人

AddRecipientBCC   隐藏的副本抄送,只有发件人和BCC收件人知道。

AddRecipientCC   副本抄送

Execute   送出邮件

了解必要的属性及方法后,余下的部分接收使用者输入的Email,当成参数传给AddRecipient方法,然后根据需要填上其余属性,最后以Execute方法寄出。例如:


    Dim JMail

    JMail = Server.CreateObject("JMail.SMTPMail")

    JMail.Logging = True

    JMail.ServerAddre  = "202.96.144.48"

    JMail.Sender = "lihonggen0@163.com"

    JMail.Subject = " ubject."

    JMail.Body = " ody."

    JMail.AddRecipient(" @163.com")

    JMail.AddAttachment("c:\go.gif")

    JMail.Priority = 3

    JMail.Execute()

    JMail = Nothing

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

相关热词搜索:.NET环境下几种不同的邮件发送解决方案

上一篇:Repeater控件分页例子
下一篇:ASP.NET立即上手教程(14)

分享到: 收藏
频道总排行
频道本月排行