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 = "smtp.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 = "rn"
'建立與伺服器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())
'準備傳送內容
發送Data = "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
'結束傳送
發送Data = sendData + "." + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'退出
發送Data = "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("發送成功")
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 = "
[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的時間就長了!