制作郵件發送、接收程序
原文地址:http://flydoos.blog.163.com/blog/static/11975604020095220422284/
你還認識我嗎?記得兩年前我哥哥小飛俠教我學習VB編程的時候你還是一名旁聽生呢。呵呵,我就是小叮當,自從上次和哥哥學習了VB之后就痴迷上了編寫程序,憑借着我過人的編程技能和敏捷的思維能力,現在已經在一家大型軟件公司擔任程序員了。
最近天氣太熱,本來准備趁着休假時間在家好好調整一番,沒料到表弟小蘑菇也看准了休假時間來這里玩,說是還要我教他VB編程,真是剛出虎穴又入狼窩呀。我這個人心地特善良,經不住他幾句甜言蜜語就這么上鈎了,好在小蘑菇他以前接觸過VB,用不着我再從頭講解一些繁瑣的基礎知識,所以決定每天花一點時間給他來一個短期提高快捷的實例培訓,這樣既可以讓他學習到VB知識,我也不用太勞累,可以多一些時間休息呢。
第一天、使用VB收發電子郵件
小叮當:我說小蘑菇呀,既然你已經學習過VB的基礎知識,也做過一些簡單的程序,那么我也就不浪費口水教你認識界面、了解控件和學習語法了。不如我來教教你怎么樣制作出一些切實可用的程序,這樣既能夠加深對VB的認識,還可以讓你擁有十足的成就感呢!
小蘑菇:好呀,那做一些什么程序呢?
小叮當:當然不會像我哥哥當年那樣簡單至極的程序,而是一些具有實用性的程序,也可以做一個小游戲之類的,你看怎么樣?
小蘑菇:好的,不過今天別教我做游戲,不然明天就沒有心思學了。
小叮當:這個我自然知道,那我們就開始動手制作一個收發電子郵件的程序吧。
小蘑菇:收發電子郵件?這個會不會很難呢?
小叮當:正所謂會者不難,難者不會,有我這位名師指點,你還怕什么呢?開始動手吧!
一、准備工作
小叮當:在VB中編寫電子郵件程序需要通過調用微軟公司的MAPI(Messaging Application Programming Interface,消息應用程序編程接口),這需要借助兩個實現電子郵件收發功能的核心控件:MAPI會話控件和MAPI消息控件。MAPI會話控件用於建立和控制一個Microsoft Mail會話,MAPI消息控件用於創建和收發郵件消息。此外,Windows系統中必須要有遵從MAPI的郵件系統,比如Exchange、Outlook等軟件,而還要進行一番設置,確保郵件系統可以正常使用。
小蘑菇:呵呵,沒關系,我用的就是Outlook,正好符合要求。不過你說的MAPI控件在哪里找呢?
小叮當:在VB中就有現成的,不過程序沒有直接放置在工具箱里,需要我們自己將MAPI控件加入VB工具箱。首先直接在VB左邊的控件欄中右擊鼠標,並在彈出菜單中選擇“部件”命令,這時可以激活部件設置窗口,在其中的“控件”列表框中選取“Microsoft MAPI Controls”一項(如圖1所示),接着按下“確定”按鈕之后可以發現工具箱中將多出了兩個圖標,這就是MAPI會話控件和MAPI消息控件的圖標(如圖2所示)。
圖一圖二
圖一
圖二
二、郵件發送程序
小叮當:添加好我們所需要的控件之后,就開始定制郵件的發送程序吧。這個郵件發送程序的基本處理過程是:根據用戶輸入信息組成郵件,然后使用MAPI消息控件的Send方法將郵件發出。具體的方法按照下述步驟完成:
1、新建一個VB項目,並將缺省窗體Form1的Caption屬性設置為“發送郵件”。 2、在Form1中加入一個MAPI會話控件MAPISession1和一個MAPI消息控件MAPIMessages1。
3、在Form1中加入三個TextBox控件,將它們的名稱屬性分別設置為“txtSendTo”、“txtSubject”和“txtMessage”,另外還要將txtMessage的Multiline屬性設置為“True”。這三個TextBox控件將分別用於填寫郵件的收件人地址、郵件主題和郵件正文。
4、在Form1中加入三個Label控件,將它們的Caption屬性分別設置為“收件人”、“主題”和“內容”,並將它們放在合適的位置用以標注相應的TextBox控件。
5、在Form1中加入一個Command Button控件,將其Caption屬性和名稱屬性分別設置為“發送”和“Send”。
所有的控件添加完畢之后應該如圖3所示。
圖三
圖三
小蘑菇:還挺像這么回事的呢,接着應該填寫代碼了吧。
小叮當:是呀,下面就是代碼部分的內容:
1、將下列代碼加入Form1的Form_Load事件:
Private Sub Form_Load()
MAPISession1.SignOn /運行程序之后進行郵箱登錄操作
End Sub
2、將下列代碼加入Form1的Form_Unload事件:
Private Sub Form_Unload(Cancel As Integer)
MAPISession1.SignOff /退出程序時候進行退出郵箱操作
End Sub 3、將下列代碼加入cmdSend的Click事件:
Private Sub cmdSend_Click()
With MAPIMessages1
.MsgIndex = -1
.RecipDisplayName = txtSendTo.Text /收信人地址
.MsgSubject = txtSubject.Text /郵件主題
.MsgNoteText = txtMessage.Text /郵件正文
.SessionID = MAPISession1.SessionID /發送程序和郵件工具之間建立的任務數
.Send
End With
MsgBox "郵件發送完畢!", , "發送郵件" /發送成功顯示信息框
End Sub
這樣一個電子郵件發送部分就制作完成了,運行程序之后只要填寫好郵件的收件人、主題和內容后,按下“發送”命令按鈕,郵件就已經成功地發往目的地了(如圖4所示)。圖4
圖四
小蘑菇:真的發送出去了,不過這是不是你的障眼法呢?我要收到這封信才相信!
小叮當:對我還不相信?好吧,下面再制作一個郵件接收程序來收取這封信件。
三、郵件接收程序
小叮當:郵件接收程序比郵件發送程序要復雜一些,這個程序首先需要使用MAPI消息控件的Fetch方法讀取郵件,這個過程將把用戶收件箱中所有未讀郵件全部裝入MAPI消息控件中。接着,檢查MAPI消息控件的MsgCount屬性以確定通過Fetch方法讀取的郵件的總數,然后可以通過設置MAPI消息控件的MsgIndex屬性來指定具體需要處理哪一封郵件。需要說明的是,MsgIndex屬性值的計數是從0開始的,也就是說,第一封郵件的索引號是0,第二封郵件的索引號是1,依次類推。具體步驟如下: 1、新建一個VB項目,將缺省窗體Form1的Caption屬性設置為“接收郵件”。
2、在Form1中加入一個MAPI會話控件MAPISession1和一個MAPI消息控件MAPIMessages1。
3、在Form1中加入三個Label控件和一個TextBox控件,將三個標簽控件的名稱屬性分別設置為“lblMsgDateReceived”、“lblMsgOrigDisplayName”和“lblMsgSubject”,將TextBox控件的名稱屬性設置為“txtMsgNoteText”,並將標簽控件的Caption屬性和文本框控件的Text屬性的內容清空。這四個控件將分別用於顯示郵件的日期、發件人、主題和內容。
4、將txtMsgNoteText控件的Locked屬性和Multiline屬性設置為“True”,ScrollBars屬性設置為“2-Vertical”。
5、在Form1中再加入四個Label控件用於標注上述四個控件,將它們的Caption屬性分別設置為“日期”、“發件人”、“主題”和“內容”。
6、在Form1中加入一個Label控件,將其名稱屬性設置為“lblMsgCount”,Caption屬性設置為“第 0 封郵件,總計 0 封郵件”。這個控件用於顯示接收的郵件總數以及當前正在處理第幾封郵件。
7、在Form1中加入三個Command Button控件,將它們的名稱屬性分別設置為“cmdPrevious”、“cmdNext”和“cmdClose”,Caption屬性分別設置為“上一封”、“下一封”和“關閉”。
小蘑菇:那么具體的程序代碼呢?
小叮當:又着急了不是?我還會騙你嗎?下面就是具體的程序代碼:
1、編寫一個子程序FetchNewMail:
Public Sub FetchNewMail()
MAPIMessages1.FetchUnreadOnly = True
MAPIMessages1.Fetch /Fetch命令將信件抓到系統存貯器的inbuffer中
End Sub
2、編寫一個子程序DisplayMessage:
Public Sub DisplayMessage()
lblMsgCount.Caption = "第 " & Ltrim(Str(MAPIMessages1.MsgIndex + 1)) & " 封郵件,總計 " & Ltrim(Str(MAPIMessages1.MsgCount)) & " 封郵件" /由MsgCount知道信件數量,再用MsgIndex設置要看 哪一封信件的內容、標題
lblMsgDateReceived.Caption = MAPIMessages1.MsgDateReceived /收取信件的日期
txtMsgNoteText.Text = MAPIMessages1.MsgNoteText /收取信件的內容
lblMsgOrigDisplayName.Caption = MAPIMessages1.MsgOrigDisplayName /發送郵件的姓名
lblMsgSubject.Caption = MAPIMessages1.MsgSubject /郵件主題
End Sub 3、將下列代碼加入Form1的Form_Load事件:
Private Sub Form_Load()
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
FetchNewMail /調用Fetch子程序
DisplayMessage /調用DisPlayMessage子程序
End Sub
4、將下列代碼加入cmdPrevious的Click事件:
Private Sub cmdPrevious()
If MAPIMessages1.MsgIndex > 0 Then
MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex - 1 /當收取信件超過1封的時候,通過“上一封”按鈕查看前面的信件
DisplayMessage
Else
Beep
End If
End Sub
5、將下列代碼加入cmdNext的Click事件:
Private Sub cmdNext_Click()
If MAPIMessages1.MsgIndex < MAPIMessages1.MsgCount - 1 Then
MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex + 1 /當收取信件超過1封的時候,通過“下一封”按鈕查看后面的信件
DisplayMessage
Else
Beep
End If
End Sub
6、將下列代碼加入cmdClose的Click事件:
Private Sub cmdClose_Click()
Unload Me
End Sub
程序運行后,在窗體加載過程中,窗體Load事件中的代碼會讀取新郵件,如果有新郵件,就顯示第一個新郵件,如果有多個新郵件,則可以使用“上一封”和“下一封”命令按鈕前后翻閱。你再看看,這封收取下來的郵件是不是我們剛才發送出去的?
小蘑菇:呵呵,真厲害!其實剛才我知道你肯定可以收到這封郵件的,只不過是說着玩的,嘿嘿。我來試着給別人發送一些郵件。
小叮當:那你就用它給好朋友發送幾封郵件,告訴他們是用你自己編寫的程序發送的,他們保證大吃一驚呢。
