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

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

** 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 = " [email protected] "

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.163.com"

'定义邮件的发送地址

mailObj.From = "[email protected]"

'定义邮件的接收地址

mailObj.To = " [email protected] "

'定义邮件的暗送地址

' mailObj.Bcc "[email protected]"

'定义邮件的抄送地址

' mailObj.Cc = "[email protected]"

'定义邮件的主题

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 Transfer Service Ready

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

客户端: HELO server.com

服务器端: 250 server.com

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

客户端: MAIL FROM:

  1<[email protected]>
  2
  3服务器端:  250 OK 
  4
  54  、  客户端发送  RCPT  命令标识收件人,服务器端回应是否愿意为收件人接受邮件 
  6
  7客户端:  RCPT TO: <[email protected]>
  8
  9服务器端:  250 OK 
 10
 115  、  协商结束后用命令  DATA  发送发送邮件 
 12
 13客户端:  DATA 
 14
 15服务器端:  354 Start mail input: end with <crlf>.<crlf>
 16
 176  、  客户端以  .  表示结束输入内容一起发送出去 
 18
 19客户端:  Subject: <crlf>
 20
 21内容  <crlf>
 22
 23.<crlf>
 24
 257  、客户端用  QUIT  命令退出。 
 26
 27客户端:  QUIT 
 28
 29服务器端:  250 server.com closing transmission channel 
 30
 31优点:可以在此基础上开发出自己的组件,利用  ** Sockets  ** 我们可以进行网络编程开发 
 32
 33缺点:程序量相对较多, 
 34
 35发送邮件的代码如下: 
 36
 37Dim  sendData  As  String 
 38
 39Dim  szData  As  Byte  () 
 40
 41Dim  CRLF  As  String 
 42
 43CRLF = "\r\n" 
 44
 45'创建与服务器25端口的连接 
 46
 47Dim  SmtpServ  As  New  TcpClient(txtsmtp.Text, 25) 
 48
 49lstlog.Items.Clear() 
 50
 51'显示服务器初始信息 
 52
 53Dim  NetStrm  As  NetworkStream 
 54
 55NetStrm = SmtpServ.GetStream() 
 56
 57Dim  RdStrm  As  New  StreamReader(SmtpServ.GetStream()) 
 58
 59If  RdStrm.ReadLine() &lt;&gt; ""  Then  lstlog.Items.Add(RdStrm.ReadLine()) 
 60
 61' 
 62
 63sendData = "HELO server " + CRLF 
 64
 65szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) 
 66
 67NetStrm.Write(szData, 0, szData.Length) 
 68
 69lstlog.Items.Add(RdStrm.ReadLine()) 
 70
 71'标志发件人 
 72
 73sendData = "MAIL FROM: " + "&lt;" + txtfrom.Text + "&gt;" + CRLF 
 74
 75szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) 
 76
 77NetStrm.Write(szData, 0, szData.Length) 
 78
 79lstlog.Items.Add(RdStrm.ReadLine()) 
 80
 81'标志收件人 
 82
 83sendData = "RCPT TO: " + "&lt;" + txtTo.Text + "&gt;" + CRLF 
 84
 85szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) 
 86
 87NetStrm.Write(szData, 0, szData.Length) 
 88
 89lstlog.Items.Add(RdStrm.ReadLine()) 
 90
 91'准备发送内容 
 92
 93sendData = "DATA " + CRLF 
 94
 95szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) 
 96
 97NetStrm.Write(szData, 0, szData.Length) 
 98
 99lstlog.Items.Add(RdStrm.ReadLine()) 
100
101'发送主题 
102
103sendData = "SUBJECT: " + txtsub.Text + CRLF 
104
105'发送内容 
106
107sendData = sendData + txtmsg.Text + CRLF 
108
109'结束发送 
110
111sendData = sendData + "." + CRLF 
112
113szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) 
114
115NetStrm.Write(szData, 0, szData.Length) 
116
117lstlog.Items.Add(RdStrm.ReadLine()) 
118
119'退出 
120
121sendData = "QUIT " + CRLF 
122
123szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) 
124
125NetStrm.Write(szData, 0, szData.Length) 
126
127lstlog.Items.Add(RdStrm.ReadLine()) 
128
129'关闭连接 
130
131&lt;SPAN lang=</crlf></crlf></crlf></crlf></crlf></[email protected]></[email protected]>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus