史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 程式 & 網頁設計技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-01-07, 09:22 AM   #1 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 .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 = "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/m ... ml/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 = "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 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: <d@e.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/bro ... amp;;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的時間就長了!
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 03:19 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1