用VisualBasic.Net發送電子郵件
如果要用Visual Basic來做一個發送電子郵件的程序,大部分人將會采用Active X組件的方式,雖然目前已經有很多可以用來發送電子郵件的Active X組件,但這些組件一般都是外國的產品,一般也都是試用版本,有著各種各樣的限制,就是沒有限制,那些免費的產品一般也都沒有使用說明,所以要想在程序中使用他是很有難度的。自從微軟公司推出了.Net框架以后,做為.Net框架中的一種重要的程序設計語言--Visual Basic .Net,可以十分方便的實現這個功能,做一個發送電子郵件程序,并且也不需要使用任何的ActiveX組件。這是因為在.Net框架中有一個通用的軟件開發包--.Net FrameWork SDK。這個軟件開發包內容十分豐富,封裝了許多功能十分強大的類庫,這當中就包含著用以發送電子郵件的類庫。Visual Basic .Net作為.Net框架中的一個重要組成部分,可以直接調用這個軟件開發包中的類庫。Visual Basic .Net就是通過調用這個軟件開發包中發送電子郵件相關的類庫來發送電子郵件。
一.軟件開發和運行的環境設置以及前期準備條件:
I > .視窗系統2000服務器版
II > ..Net FrameWork SDK Beta 2版
III > .打開"控制面板",進入"添加和刪除程序",然后再點擊"添加/刪除Windows組件",就可以看見以下界面:
![]() 圖01:系統配置界面01 |
點中"Internet信息服務( IIS )",然后點擊"詳細信息",可得到如下界面:
![]() 圖02:系統配置界面 |
點中選擇"SMTP Serverce"選項,然后按"確定"按鈕。再按"下一步"按鈕,則系統在重新啟動后,就會安裝好運行本文程序所需要的SMTP Service了。
二.Visual Basic .Net是如何發送電子郵件:
在.Net FrameWork SDK Beta 2版中,有一個叫做System.Web.Mail的名稱空間,這個名稱空間被封裝在System.Web.dll文件中。在這個名稱空間中定義了關于發送電子郵件的方法、對象和屬性。Visual Basic .Net就是通過調用此名稱空間中的方法、對象和屬性,發送電子郵件的。在本文中,發送電子郵件主要用到了二個對象:一個是MailMessage對象,此對象主要是封裝電子郵件的各個屬性,即所謂的發信人,收信人,信件的主題,信件的內容和信件的附件等。另外一個是SmtpMail對象,這個對象的主要的作用是把已經定義好各個屬性的MailMessage對象(即電子郵件內容)給發送出去,這是通過調用SmtpMail對象的Send ( )方法來實現的
三.在Visual Basic .Net中做發送電子郵件程序的主要步驟:
(1).首先就要在程序的最前面導入封裝對象的名稱空間,具體如下:
Imports System.Web.Mail
(2). MailMessage對象中的各個屬性的含義:
下表是MailMessage對象中的各個屬性以及他們所代表的意思:
| 屬性名稱 | 代表意義 |
| From | 電子郵件源地址 |
| To | 電子郵件目的地址 |
| Subject | 電子郵件郵件主題 |
| Priority | 電子郵件優先級 ( High , Low , Normal ) |
| Attachments | 電子郵件的附件 |
| Bcc | 電子郵件的暗送地址 |
| Cc | 電子郵件的抄送地址 |
| Body | 電子郵件內容主體 |
| Bodyformat | 電子郵件格式( Html , Text ) |
| Bodyencoding | 電子郵件編碼( Base64 , Uuencode ) |
在程序中,通過以下代碼實現對電子郵件的各個屬性的定義,具體如下:
| Dim aMessage as new MailMessage '新建一個MailMessage對象 aMessage.From = FromTextBox.Text '定義發信人地址,如果是多人,可以用","分開 aMessage.To = ToTextBox.Text '定義收信人地址,如果是多人,可以用","分開 aMessage.Cc = CCTextBox.Text '定義抄送人地址,如果是多人,可以用","分開 aMessage.Bcc = BCCTextBox.Text '定義暗送人地址,如果是多人,可以用","分開 aMessage.Subject = SubjectTextBox.Text '定義郵件的主題 aMessage.Body = MessageTextBox.Text '定義郵件的內容 if AttachmentTextBox.Text.Length > 0 then aMessage.Attachments.Add ( new MailAttachment ( AttachmentTextBox.Text , MailEncoding.Base64 ) ) End if '給郵件增加一個附件 |
可見定義用Visual Basic .Net來定義電子郵件屬性是比較方便的。
注:以上程序代碼中"="右邊是程序中定義的文本框的"Text"值。
(3).用SmtpMail對象發送已經定義好的各個屬性的MailMessage對象:
用Visual Basic .Net調用SmtpMail對象的Send ( )方法有多種方式。本文介紹的只是其中的一種比較常用的調用方式,即:SmtpMail.Send ( MailMessage對象 )。在程序中的實現語句如下:
| SmtpMail.Send ( aMessage ) '發送電子郵件 |
四.本文源程序代碼( Send.vb ):
在介紹完以上的內容以后,不難得到一個用Visual Basic .Net做發送電子郵件的完整的程序代碼,具體如下:
| Imports System Imports System.Drawing Imports System.Collections Imports System.ComponentModel Imports System.Windows.Forms Imports System.Data Imports System.Web Imports System.Web.Mail '導入程序中使用到的名稱空間 Public Class Form1 Inherits Form private label1 as Label private label2 as Label private label3 as Label private WithEvents SendButton as Button private WithEvents ExitButton as Button private FromTextBox as TextBox private ToTextBox as TextBox private SubjectTextBox as TextBox private MessageTextBox as TextBox private CCTextBox as TextBox private CCLabel as Label private BCCTextBox as TextBox private label4 as Label private label5 as Label private WithEvents BrowseButton as Button private openFileDialog1 as OpenFileDialog private AttachmentTextBox as TextBox private components as System.ComponentModel.Container public Sub New ( ) ' 對窗體中所需要的內容進行初始化 InitializeComponent ( ) End Sub '清除在程序中使用的所有資源 Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) If disposing Then If Not ( components Is Nothing ) Then components.Dispose ( ) End If End If MyBase.Dispose ( disposing ) End Sub '初始化程序中使用的各個組件 Private Sub InitializeComponent ( ) MessageTextBox = new TextBox ( ) ToTextBox = new TextBox ( ) SendButton = new Button ( ) ExitButton = new Button ( ) FromTextBox = new TextBox ( ) label1 = new Label ( ) SubjectTextBox = new TextBox ( ) label2 = new Label ( ) label3 = new Label ( ) CCTextBox = new TextBox ( ) CCLabel = new Label ( ) BCCTextBox = new TextBox ( ) label4 = new Label ( ) label5 = new Label ( ) AttachmentTextBox = new TextBox ( ) BrowseButton = new Button ( ) openFileDialog1 = new OpenFileDialog ( ) FromTextBox.Location = new System.Drawing.Point ( 96 , 16 ) FromTextBox.Name = "FromTextBox" FromTextBox.Size = new System.Drawing.Size ( 240 , 20 ) FromTextBox.TabIndex = 0 FromTextBox.Text = "" ToTextBox.Location = new System.Drawing.Point ( 96 , 53 ) ToTextBox.Name = "ToTextBox" ToTextBox.Size = new System.Drawing.Size ( 240 , 20 ) ToTextBox.Text = "" ToTextBox.TabIndex = 1 CCTextBox.Location = new System.Drawing.Point ( 96 , 88 ) CCTextBox.Name = "CCTextBox" CCTextBox.Size = new System.Drawing.Size ( 240 , 20 ) CCTextBox.TabIndex = 2 CCTextBox.Text = "" BCCTextBox.Location = new System.Drawing.Point ( 96 , 120 ) BCCTextBox.Name = "BCCTextBox" BCCTextBox.Size = new System.Drawing.Size ( 240 , 20 ) BCCTextBox.TabIndex = 3 BCCTextBox.Text = "" SubjectTextBox.Location = new System.Drawing.Point ( 96 , 152 ) SubjectTextBox.Name = "SubjectTextBox" SubjectTextBox.Size = new System.Drawing.Size ( 240 , 20 ) SubjectTextBox.TabIndex = 4 SubjectTextBox.Text = "" AttachmentTextBox.Location = new System.Drawing.Point ( 96 , 184 ) AttachmentTextBox.Name = "AttachmentTextBox" AttachmentTextBox.Size = new System.Drawing.Size ( 168 , 20 ) AttachmentTextBox.TabIndex = 5 AttachmentTextBox.Text = "" MessageTextBox.Location = new System.Drawing.Point ( 8 , 216 ) MessageTextBox.Multiline = true MessageTextBox.Name = "MessageTextBox" MessageTextBox.Size = new System.Drawing.Size ( 320 , 152 ) MessageTextBox.Text = "" MessageTextBox.TabIndex = 6 BrowseButton.Location = new System.Drawing.Point ( 280 , 184 ) BrowseButton.Name = "BrowseButton" BrowseButton.Size = new System.Drawing.Size ( 56 , 24 ) BrowseButton.Text = "瀏覽文件" BrowseButton.TabIndex = 7 SendButton.Location = new System.Drawing.Point ( 64 , 380 ) SendButton.Name = "SendButton" SendButton.Size = new System.Drawing.Size ( 72 , 24 ) SendButton.Text = "發送郵件" SendButton.TabIndex = 8 ExitButton.Location = new System.Drawing.Point ( 200 , 380 ) ExitButton.Name = "ExitButton" ExitButton.Size = new System.Drawing.Size ( 72 , 24 ) ExitButton.Text = "退出程序" ExitButton.TabIndex = 9 label1.Font = new System.Drawing.Font ( "宋體", 9F ) label1.Location = new System.Drawing.Point ( 48 , 16 ) label1.Name = "label1" label1.Size = new System.Drawing.Size ( 48 , 16 ) label1.Text = "發信人:" label2.Font = new System.Drawing.Font ( "宋體", 9F ) label2.Location = new System.Drawing.Point ( 48 , 53 ) label2.Name = "label2" label2.Size = new System.Drawing.Size ( 48 , 16 ) label2.Text = "收信人:" label3.Font = new System.Drawing.Font ( "宋體", 9F ) label3.Location = new System.Drawing.Point ( 48 , 152 ) label3.Name = "label3" label3.Size = new System.Drawing.Size ( 48 , 16 ) label3.Text = "主 題:" CCLabel.Font = new System.Drawing.Font ( "宋體", 9F ) CCLabel.Location = new System.Drawing.Point ( 48 , 88 ) CCLabel.Name = "CCLabel" CCLabel.Size = new System.Drawing.Size ( 48 , 16 ) CCLabel.Text = "抄 送:" label4.Font = new System.Drawing.Font ( "宋體", 9F ) label4.Location = new System.Drawing.Point ( 48 , 120 ) label4.Name = "label4" label4.Size = new System.Drawing.Size ( 48 , 16 ) label4.Text = "暗 送:" label5.Font = new System.Drawing.Font ( "宋體", 9F ) label5.Location = new System.Drawing.Point ( 48 , 184 ) label5.Name = "label5" label5.Size = new System.Drawing.Size ( 48 , 16 ) label5.Text = "附 件:" openFileDialog1.Title = "選擇文件作為郵件的附件:" Me.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) Me.ClientSize = new System.Drawing.Size ( 344 , 413 ) Me.Controls.Add ( BrowseButton ) Me.Controls.Add ( AttachmentTextBox ) Me.Controls.Add ( label5 ) Me.Controls.Add ( label4 ) Me.Controls.Add ( BCCTextBox ) Me.Controls.Add ( CCLabel ) Me.Controls.Add ( CCTextBox ) Me.Controls.Add ( ExitButton ) Me.Controls.Add ( SendButton ) Me.Controls.Add ( label3 ) Me.Controls.Add ( label2 ) Me.Controls.Add ( label1 ) Me.Controls.Add ( SubjectTextBox ) Me.Controls.Add ( ToTextBox ) Me.Controls.Add ( FromTextBox ) Me.Controls.Add ( MessageTextBox ) Me.Name = "Form1" Me.Text = "用Visual Basic .Net做郵件發送軟件!" Me.ResumeLayout ( false ) End Sub '處理發送按鈕單擊事件 Private Sub SendButton_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles SendButton.Click Dim aMessage as new MailMessage '新建一個MailMessage對象 aMessage.From = FromTextBox.Text '定義發信人地址,如果是多人,可以用","分開 aMessage.To = ToTextBox.Text '定義收信人地址,如果是多人,可以用","分開 aMessage.Cc = CCTextBox.Text '定義抄送人地址,如果是多人,可以用","分開 aMessage.Bcc = BCCTextBox.Text '定義暗送人地址,如果是多人,可以用","分開 aMessage.Subject = SubjectTextBox.Text '定義郵件的主題 aMessage.Body = MessageTextBox.Text '定義郵件的內容 if AttachmentTextBox.Text.Length > 0 then aMessage.Attachments.Add ( new MailAttachment ( AttachmentTextBox.Text , MailEncoding.Base64 ) ) End if '給郵件增加一個附件 SmtpMail.Send ( aMessage ) '發送電子郵件 MessageBox.Show( "電子郵件已經發送到->" + ToTextBox.Text ) End Sub '處理退出按鈕單擊的事件 Private Sub ExitButton_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles ExitButton.Click Application.Exit ( ) End Sub '處理瀏覽文件按鈕單擊的事件 Private Sub BrowseButton_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles BrowseButton.Click if openFileDialog1.ShowDialog ( ) = DialogResult.OK then AttachmentTextBox.Text = openFileDialog1.FileName End if End Sub End Class Module Module1 Sub Main ( ) Application.Run ( new Form1 ( ) ) End sub End Module |
五.編譯源程序文件和編譯好的程序的執行界面:
在編譯Visual Basic .Net和Visual C#的程序的時候,發現一個比較大的不同點,就是用Visual C#的編譯器Csc.exe編譯文件,可以在編譯器后面不加上引用,編譯器自動加上,可以正確編譯。但在用Visual Basic .Net的編譯器Vbc.exe來編譯文件,如果在源程序中用到的引用,在編譯的時候沒有加上,則會出錯。所以只有通過以下命令編譯后,才可以得到執行程序Send.exe。
| Vbc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:system.web.dll send.vb |
下圖是Send.exe執行的界面:
![]() 圖03:用Visual Basic .Net做的郵件發送程序的運行界面 |
六.總結:
至此已經介紹了在ASP.NET頁面和用Visual C#、Visual Basic .Net來發送電子郵件,由于他們的各自語法不同,所以具體的實現語句也就不一樣。但主要的實現思想是一致的,就是通過調用.Net FrameWork SDK中的類庫。


