前言
隨著電腦網路的發展,人與人之間訊息傳輸的時間大為縮短。許多文件都是以電子郵件的形式來傳送;通常使用過電腦的人,或多或少都會用到E-Mail來傳輸訊息。本文將介紹如何以MicrosoftMAPI(MessagingapplicationPRogramInterface)設計Mail程式。首先以VisualBasic所提供的MAPIsessioncontrol及MAPIMessagecontrol來設計Mail收發程序,然後用MicrosoftInternetExplorer3.0所提供的E-Mail程式來測試程式設計的正確性。
MAPI簡介
MAPI介面是由微軟公司提供的一系列供用戶開發Mail、Scheduling、bulletinboard、communication程式的程式設計介面。使用MAPI設計程式時,必須先在程式和MAPI之間建立一條或數條Session;當Session建立好之後,Client端程式就可以使用MAPI所提供的功能。
MAPI的功能主要分成三大部分:AddressBooks、Transport和MessageStore。 AddressBooks主要負責設定E-mailtype、protocol等參數;Transport負責文件的傳送與接收等功能;MessageStore則負責傳送接收等資訊的處理。
說了這麼多,MAPI介面好像很可怕。不過沒關係,VisualBasic所提供的MAPISessioncontrol及MAPIMessagecontrol,已經將許多複雜的部分包裝成簡單的property和功能,我們只需要對property及功能作一些簡單的設置,就可以寫一個郵件發送和接收的程序。
以下筆者將使用VisualBasic的MAPIcontrol,來設計mail傳送和接收的程式。
E-mail發送部分
Step1:設定Exchange各項參數
進入Exchange系統,選擇新增設定檔;螢幕上會顯示所需的資訊服務,選擇InternetMail。將設定檔的名稱設為test。螢幕會顯示兩個選項,您可以選擇以modem方式,或以network方式連線。筆者所用的是Internet專線,所以選擇network;假若您是使用PPP撥號方式連接Internet,就要選擇modem。選擇network後,Exchange會要求我們輸入mailserver的ipaddress。筆者現在所使用的Mailserver位址是202.96.128.111,在本程式中便將它設定為該位址。接著將Transformmessage的模式設定為automatic,這樣當我們連接到Mailserver時,新的資訊會自動download到local
端。
接下來,將您所使用的Emailaddress、fullname、passWord、downloadpath一步一步設定好,這樣就完成了Exchange各項
參數的設定。
Step2:程式設計
在File選項中選擇NewProject建立一個新的工程,這時畫面會看到許多選項,例如ActiveXDocument.EXE、ActiveXDocument.DLL、ActiveX.EXE、ActiveXControl等...,這時要選Standard.EXE。
在Project下,選擇Property屬性選項;在general選項下,將ProjectName改為email-send,並將Form名稱及Caption改為email-send
在畫面的Form上加入一個MAPImessagecontrol,取名為MAPIm1;加入一個MAPIsessioncontrol,取名為MAPIs1;加入三個textboxcontrol,取名為subject、content、addr。並在三個textbox前面各加入一個Label,將Caption分別改為subject、content、addr。
為方便讀者了解彼此關係,以下表說明一遍:
(TextBox)Name
subject(輸入信件標題)
content(輸入信件內容)
addr(輸入信件要傳送的地址)
-------------------------------------------------- ------------------------------
(Label)Caption
subject(輸入信件標題提示)
content(輸入信件內容提示)
addr(輸入信件要傳送的地址提示)
將MAPIm1的各項property設定如下:
downloadmail=TRUE
logoUI=TRUE
newsession=FALSE
username="test"
這裡將downloadmail設定為TRUE,當程式和mailserver第一次連線時,會將新的maildownload到local端。將logoUI設定為TRUE,則當您程式中logon名稱輸入錯誤時,系統會顯示一個MessageBox來讓您輸入正確的名稱。由於這個程式只使用到一條session,我們將它的值設定成FALSE。當然啦!如果您有許多session要建立的話,也可以將它設定成TRUE。 username中所填入的,是我們在Exchange中所新增的設定檔名稱;如果沒有填內容的話,系統將會顯示一些messagebox請您輸入檔案。在螢幕的Form上加入三個Buttoncontrol,logon、logoff與send,分別將Caption改為logon、logoff、send。
(Button)
NameCaption
logon(執行登入指令)logon
logoff(執行登出指令)logoff
send(執行傳出信件命令)send
在logon_Click()中加入以下程式碼,這個動作是使我們登入mailserver。
MAPIS1.SignOn
MAPIM1.SessionID=MS1.SessionID
MsgBox"youridis" Str(MS1.SessionID)
MS1.SignOn是作登入的動作。在登入時,因為已經將MAPIm1control的downloadmail屬性設定為TRUE,所以可以在螢幕上看到messagebox顯示系統正在downloadmail。登入成功後,系統會傳回一個sessionID,將ID填入MAPIM1的SessionID中,這樣就可以利用這條session來傳送E-mail。
在logoff_Click()中加入以下程式碼,這個動作是讓我們離開mailserver。
MAPIS1.SignOff
在send_Click()中加入以下程式碼,這個動作是使我們發送email。
MAPIM1.Compose
MAPIM1.RecipDisplayName=addr.text
MAPIM1.AddressResolveUI=True
MAPIM1.MsgSubject=subject.text
MAPIM1.MsgNoteText=content.text
MAPIM1.Send
MsgBox"yousuccessful"Compose指令的主要目的,是讓您可以改變RecipDisplayName的內容,將所需傳送的E-mail位址、主題、文章內容分別填入RecipDisplayName、MsgSubject、MsgNoteText,接著以sgsend指令傳送。
Step3:用IE3.0Mail程式測試程序
執行上面設計的email-send程式。在subjecttextbox中填入"發信測試",在addresstextbox中填入[email protected],在contenttextbox中輸入要傳送的內容:"大家好!這是發信測試",接著按傳送。這樣信件就寄出了!
執行IE3.0選擇接收信件,在mail選項中選擇readmail。我們會在inbox中看到一封標題為"發信測試"的信件,接著我們看看它的內容,沒錯!那就是我們剛寄出的測試信。
E-mail接收部分
Step1:程式設計
在File選項中選擇NewProject建立一個新的工程。在螢幕上看到許多選項,如ActiveXDocument.EXE、ActiveXDocument.DLL、ActiveX.EXE、ActiveXControl等,這時要選Standard.EXE。
接著在Project下,選擇Property屬性選項;在general選項下,將ProjectName改為email-get,並將FORM名稱及Caption改為email-get。
在螢幕的Form上加入一個MAPImessagecontrol,取名為MAPIm
1;加入一個MAPIsessioncontrol,取名為MAPIs1;加入三個Textboxcontrol,分別取名為subject、content、indexno,將其Caption改為mail-subject、mail-content、indexno;並在TextBox前各加入一個Labelcontrol,將Caption分別改為subject、content、indexno。
將MAPIm1的各項property設定如下:
downloadmail=TRUE
logoUI=TRUE
newsession=FALSE
username="test"
這些設定原理如同設計發送郵件程式部分。接著,在螢幕的Form上加入一個Buttoncontrolget-mail,將Caption改為getmail。如同發送mail程式部分和mailserver建立一條session。
在get-mail_Click()中加入以下程式碼,這個動作是使我
們接收email。
MAPIM1.Fetch
Form1.Caption=MAPIM1.MsgCount
MAPIM1.MsgIndex=CINT(indexno.text)
subjec.Text=MM1.MsgNoteText
content.Text=MAPI1.MsgSubject
Fetch命令,是將信件抓到系統存貯器的inbuffer中。我們將信件抓回來後,可以由MsgCountproperty知道信件數量。接著可以用MsgIndex設定要看哪一封信件的內容、標題。
Stept2:測試mail接收程序
首先用任何一種mail程序,任意書寫幾封信到mailserver。在Form1的Caption中,我們會看到所接收的信件的數量。執行上面設計的email-get程序,在indexnotextbox中填入1。接著按getmailButton,這樣信件內容及標題就會顯示在content、subject兩個TextBox中。恭喜您成功了! ->