程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .NET環境下幾種不同的郵件發送解決方案

.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

  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 = "smt

p.XXX.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:\aa.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: 〈[email protected]

  服務器端: 250 OK

  4、 客戶端發送RCPT命令標識收件人,服務器端回應是否願意為收件人接受郵件

  客戶端:RCPT TO: 〈[email protected]

  服務器端: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 = SmtpS

erv.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)

  4、IIS SMTP自帶的基本的發信組件CDONTS

 你不必專門下載,微軟已經提供了這個組件,只要安裝了2000,NT的SMTP就會有的。

  優點:組件由

target="_blank">操作系統自帶

  缺點:功能比較差,可擴展性不強

  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 = "[email protected]"
  JMail.Subject = "subject."
  JMail.Body = "body."
  JMail.AddRecipIEnt("[email protected]")
  JMail.AddAttachment("c:\go.gif")
  JMail.Priority = 3
  JMail.Execute()
  JMail = Nothing

  總結:選擇何種方案,視程序的用途和需求而定,本文例出的幾種方案,供大家參考。例如用友軟件U8,調用outlook組件,一樣整合到自己的軟件中。我編寫的管理系統,自己寫組件(SMTP),功能同樣強大,不過Coding的時間就長了!

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved