熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NET環境下五種郵件發送解決方案

2013-11-13 10:32:30  來源: .NET編程 

  使用outLook提供的發送

  如我見過的用友軟件U生產制造(演示版)其中的郵件功能就是通過調用outLook的ActiveX 組件

  優點開發簡單

  缺點依賴outlook組件SMTP 郵件服務

  郵件發送的代碼如下

  

  以下是引用片段 Private Sub Send()   Dim outObj As New OutlookApplication()   Dim Item As OutlookMailItemClass   Item = outObjCreateItem()   ItemTo =   ItemSubject = hello   ItemBody = hell   ItemAttachmentsAdd(C:\abctxt)   ItemSend()   End Sub

  WEB開發在ASPNet中引用SystemWebMail類

  SystemWebMail 命名空間包含使您可以使用 CDOSYS(Windows 的協作數據對象)消息組件來構造和發送消息的類郵件消息是通過內置在 Microsoft Windows 中的 SMTP 郵件服務或任意的 SMTP 服務器來傳送的此命名空間中的類可以在 ASPNet 或任何托管應用程序

  MailAttachment提供用於構造電子郵件附件的屬性和方法

  MailMessage提供用於構造電子郵件的屬性和方法

  SmtpMail提供用於使用 Windows 的協作數據對象 (CDOSYS) 消息組件來發送消息的屬性和方法

  郵件可以通過 Microsoft Windows 中內置的 SMTP 郵件服務或任意 SMTP 服務器來傳送SystemWebMail 命名空間中的類型可以在 ASPNet 或任何托管應用程序使用

  Smtp服務器的設置現在一些免費郵件提供商是不再提供針對所有郵件提供Smtp服務在發送郵件的時候需要驗證用戶信息考慮Smtp用戶驗證問題

  如果Smtp服務器在本地計算機發送速度很快的基本上不用擔心如果不是本地服務器那麼發送的時候最好不要以此太多一是速度問題二是以此發送太多郵件Smtp服務器可能認為是垃圾郵件而拒絕服務

  代碼如下

  

  以下是引用片段 Private Sub Button_Click(ByVal sender As SystemObject ByVal e As
SystemEventArgs) Handles ButtonClick   Dim mailObj As New MailMessage()   Dim smtp As SmtpMail   定義SMTP服務器的名稱   smtpSmtpServer =   定義郵件的發送地址   mailObjFrom =   定義郵件的接收地址   mailObjTo =   定義郵件的暗送地址   mailObjBcc=   定義郵件的抄送地址   mailObjCc =   定義郵件的主題   mailObjSubject = 主題   定義郵件的主體   mailObjBody = 郵件主體!   郵件以 HTML的格式發送   mailObjBodyFormat = MailFormatHtml   定義郵件的有限級在此設定為高   mailObjPriority = MailPriorityHigh   給發送的郵件附加上一個附件   mailObjAttachmentsAdd(New MailAttachment(c:\aadoc))   smTpSend(mailObj)   End Sub

  在VBNet或C#開發Windows 應用程序中使用SystemNetSockets

  也是基於SMTP協議

  一SMTP協議簡介

   客戶端通過服務器的端口建立TCP/IP連接

  服務器端 Simple Mail Transfer Service Ready

   客戶端使用HELO命令標識發件人

  客戶端HELO

  服務器端

   客戶端發送MAIL命令服務器端以OK作為響應表明准備接收

  客戶端 MAIL FROM 〈〉

  服務器端 OK

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

  客戶端RCPT TO 〈〉

  服務器端 OK

   協商結束後用命令DATA發送發送郵件

  客戶端DATA

  服務器端 Start mail input end with 〈CRLF〉〈CRLF〉

   客戶端以表示結束輸入內容一起發送出去

  客戶端Subject 〈CRLF〉

  內容〈CRLF〉

  〈CRLF〉

  客戶端用QUIT命令退出

  客戶端QUIT

  服務器端 closing transmission channel

  優點可以在此基礎上開發出自己的組件利用Sockets我們可以進行網絡編程開發

  缺點程序量相對較多

  發送郵件的代碼如下

  

  以下是引用片段 Dim sendData As String   Dim szData As Byte()   Dim CRLF As String   CRLF = \r\n   創建與服務器端口的連接   Dim SmtpServ As New TcpClient(txtsmtpText )   lstlogItemsClear()   顯示服務器初始信息   DimNetStrm AsNetworkStream   NetStrm = SmtpServGetStream()   Dim RdStrm As New StreamReader(SmtpServGetStream())   If RdStrmReadLine() 〈〉 Then lstlogItemsAdd(RdStrmReadLine())      sendData = HELO server + CRLF   szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray())   NetStrmWrite(szData szDataLength)   lstlogItemsAdd(RdStrmReadLine())   標志發件人   sendData = MAIL FROM: + + txtfromText + + CRLF   szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray())   NetStrmWrite(szData szDataLength)   lstlogItemsAdd(RdStrmReadLine())   標志收件人   sendData = RCPT TO: + + txtToText + + CRLF   szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray())   NetStrmWrite(szData szDataLength)   lstlogItemsAdd(RdStrmReadLine())   准備發送內容   sendData = DATA + CRLF   szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray())   NetStrmWrite(szData szDataLength)   lstlogItemsAdd(RdStrmReadLine())   發送主題   sendData = SUBJECT: + txtsubText + CRLF   發送內容   sendData = sendData + txtmsgText + CRLF   結束發送   sendData = sendData + + CRLF   szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray())   NetStrmWrite(szData szDataLength)   lstlogItemsAdd(RdStrmReadLine())   退出   sendData = QUIT + CRLF   szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray())   NetStrmWrite(szData szDataLength)   lstlogItemsAdd(RdStrmReadLine())   關閉連接   NetStrmClose()   RdStrmClose()   lstlogItemsAdd(連接關閉)   lstlogItemsAdd(發送成功)

  大家還可以參考使用C# 創建郵件發送組件(SMTP)

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

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

  優點組件由操作系統自帶

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

  Mymail = CreateObject(CDONTSNewMail

  MymailFrom = *** 信件發送者信箱

  MymailTo = *** 信件接收者信箱

  MymailCC = *** 抄送

  MymailBCC = *** 密件發送

  MymailSubject = *** 信件主題

  MymailBody = *** 信件正文

  設置優先級不重要一般重要

  MymailImportance =

  MymailSend()

  Mymail = Nothing

  使用JMail組件

  Jmail具有以下特點

  ()可以發送附件

  ()詳細日志能力便於你查看問題所在

  ()設置郵件發送的優先級

  ()支持多種格式的郵件發送比如說以HTML或者TXT的方式發送郵件這是個免費的組件

  ()密件發送/(CC)抄送/緊急信件發送能力

  ()最關鍵的就是——免費的組件不必發錢所以非常值得使用

  網站目前版本是

  JMail組件的常用屬性

  Body   郵件正文

  Logging   調用Log記錄供Debug用

  Priority   郵件的優先程度

  Sender   發件人

  ServerAddress   SMTP服務器的IP地址或名稱

  Subject   郵件標題

  JMail組件的常用方法

  AddAttachment   指定附件文件

  AddRecipient   加入一個收件人

  AddRecipientBCC   隱藏的副本抄送只有發件人和BCC收件人知道

  AddRecipientCC   副本抄送

  Execute   送出郵件

  了解必要的屬性及方法後余下的部分接收使用者輸入的Email當成參數傳給AddRecipient方法然後根據需要填上其余屬性最後以Execute方法寄出例如

  

  以下是引用片段 Dim JMail   JMail = ServerCreateObject(JMailSMTPMail)   JMailLogging = True   JMailServerAddress =   JMailSender =   JMailSubject = subject   JMailBody = body   JMailAddRecipient()   JMailAddAttachment(c:\gogif)   JMailPriority =   JMailExecute()   JMail = Nothing

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


From:http://tw.wingwit.com/Article/program/net/201311/13955.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.