一. 程序思路
所有的程序,主要實(shí)現(xiàn)兩個功能,一、發(fā)送郵件;二、上傳附件。使用無組件上傳程序來上傳附件到服務(wù)器,在發(fā)送完后,將刪除服務(wù)器上的郵件。實(shí)現(xiàn)這兩個功能,需要一個數(shù)據(jù)庫來存放郵件內(nèi)容及附件信息(文件名)。郵件的發(fā)送有兩種情況:一是,無附件的郵件;二是,有附件的郵件。
1.發(fā)送無附件的郵件。用戶根據(jù)實(shí)際情況來填寫收信人、發(fā)信人、抄送、密送、SMTP服務(wù)器地址、郵件主題、郵件內(nèi)容等信息,這些信息中,收信人、發(fā)信人、郵件主題、郵件內(nèi)容是必須填寫的,否則將收不到郵件。如果SMTP服務(wù)器支持SMTP驗(yàn)證,那么你就把你在該郵局的用戶名和密碼填上。如,你填的發(fā)信人地址是xxxx@163.com,因?yàn)椋保叮车模樱停裕蟹⻊?wù),支持SMTP驗(yàn)證,所以你就要需要你在163的用戶名xxxx,密碼****,這樣才能順利發(fā)送郵件;如,你發(fā)信人地址是xxxx@hotmail.com,因?yàn)閔otmail是不需要SMTP驗(yàn)證的,所以你不用填寫用戶名和密碼。只要記住一點(diǎn),你的發(fā)信的SMTP服務(wù)器支持SMTP驗(yàn)證的話,你就要填寫相應(yīng)的用戶名和密碼。你在填寫完表單后,點(diǎn)“發(fā)送”按鈕就直接發(fā)送郵件了。這個過程是在mail.asp和inc_clsEmail.asp完成的。
2.發(fā)送帶附件的郵件。這個過程,主要分三步,一、填寫表單信息(同上),不過在點(diǎn)“發(fā)送”按鈕前,需要轉(zhuǎn)到第二步,發(fā)送附件。二、此步聚主要是上傳附件到服務(wù)器。需要服務(wù)器支持FSO、Dictionary、Stream等組件。在進(jìn)入上傳附件界面前,先在數(shù)據(jù)庫中創(chuàng)建一條記錄,把剛成填的表單信息存在表里,然后選擇本地需要本地的rar或zip文件,選好后點(diǎn)“上傳”按鈕就行了,傳完后程序?qū)⒏聰?shù)據(jù)庫中存入附件文件名和字段的內(nèi)容并自動跳轉(zhuǎn)到發(fā)信頁面,發(fā)信頁面從數(shù)據(jù)庫中讀取郵件信息并顯示出來,此時點(diǎn)“發(fā)送”,就將發(fā)送附件了。本過程主要由mail.asp、inc_clsEmail.asp、inc_clsUpload.asp、Upload.asp和Uploadok.asp來完成。
在這個發(fā)信程序中用到的文件清單: attachment.mdb '郵件信息臨時存放庫 install.asp '在數(shù)據(jù)庫中創(chuàng)建郵件信息臨時表 Mail.asp '發(fā)送郵件 Upload.asp '文件上傳 Uploadok.asp '文件上傳成功 inc_clsEmail.asp '郵件發(fā)送類 inc_clsUpload.asp '無組件上傳類 inc_set.asp '一些表格顏色的設(shè)置
二.建立數(shù)據(jù)庫 1.打開你的Access建立一個文件名為:attachment.mdb.添加以下字段: (1). ID 類型為自動編號(存放郵件信息的ID編號) (2). smtpcheck 類型為是/否字段(存放是否需要SMTP驗(yàn)證) (3). from 類型為文本字段(存放發(fā)信人的Email地址) (4). fromname 類型為文本字段(存放發(fā)信人的名字) (5). to 類型為文本字段(存放收信人的Email地址) (6). bcc 類型為文本字段(存放密送人的Email地址) (7). cc 類型為文本字段(存放抄送人的Email地址) (8). server 類型為文本字段(存放SMTP服務(wù)器地址) (9). subject 類型為文本字段(存放郵件主題) (10). body 類型為備注字段(存放郵件的內(nèi)容) (11). username 類型為文本字段(存放郵箱登錄用戶名) (12). password 類型為文本字段(存放郵箱登錄的密碼) (13). filenames 類型為文本字段(存放附件的文件名) 注意:可以把字段設(shè)置為允許為空。
當(dāng)然你可以自己添加你認(rèn)為需要的字段,如果你把字段名或表名換成其它名稱,則對程序也要作出相應(yīng)的更改,不然會出錯。如果你不想手工建表及添加字段,那你可以在瀏覽器中運(yùn)行Install.asp文件,它可以自動建表,你就可以偷懶了:)
2. 在開始編寫之前你可以羅列一下要用到的SQL語句.
'搜索出數(shù)據(jù)庫中ID號為1的郵件信息 SQL = "SELECT * FROM attachment ORDER BY WHERE id=1" '這個語句是添加新的臨時郵件信息時用到的. SQL="INSERT INTO attachment(smtpcheck,from,fromname,to,bcc,cc,server,subject,body,username, password,filenames) VALUES(true,'cjj8110@hotmail.com',cjj','cjj8110@hotmail.com','','','','測試','測試郵件件發(fā)送程序','cjj8110','********','1,zip,1.rar')" '刪除表中全部數(shù)據(jù)。 SQL = "DELETE FROM attachment" '刪除表中指定ID的記錄 SQL = "DELETE FROM attachment WHERE id =" & id '更新表中,指定ID的filenames字段的內(nèi)容 SQL = "UPDATE attachemnt SET filenames='" & filenames & "' WHERE ID=" & id
三.編寫代碼 Install.asp:考慮到手工建表有點(diǎn)麻煩,所以寫了這個文件。文件主要用到CREATE TABLE和DROP TABLE語句,不過由于數(shù)據(jù)庫的原因,有些數(shù)據(jù)庫有可能不支持此語句。本文以Access為例,因?yàn)锳CCESS支持這兩條語句,如果還是新手還看不懂那也沒關(guān)系,以為有機(jī)會再研究好了:)。由于不清楚數(shù)據(jù)庫定義了那些關(guān)鍵字,所以在創(chuàng)建表和字段時,都用[]把表名和字段名括起來,即使表名或字段名和數(shù)據(jù)庫的關(guān)鍵字沖突,也不會引起程序出錯。不過運(yùn)行本程序前,必須先在Access中創(chuàng)建一個數(shù)據(jù)庫名稱為attachment.mdb,可以不為其創(chuàng)建表,用此程序來創(chuàng)建。
install.asp的源碼:
[Ctrl+A 全部選擇 然后拷貝]
mail.asp的源碼:
[Ctrl+A 全部選擇 然后拷貝]
inc_clsEmail.asp文件,主要實(shí)現(xiàn)了郵件發(fā)送的全過程。此類有如下幾種方法:a)check,主要是檢測服務(wù)器支持哪些發(fā)信組件,并且發(fā)送一封郵件,看看能否成功發(fā)送;b)mailerr,主要是返回發(fā)送郵件過程中的錯誤信息;c)server,設(shè)置SMTP服務(wù)器的地址;d)send,發(fā)送郵件;e)BCC,密送郵件;f)CC,抄送郵件;g)addfile,添加附件,可添加多個附件;h)close,釋放數(shù)據(jù)。
inc_clsEmail.asp的代碼:
[Ctrl+A 全部選擇 然后拷貝]
upload.asp的源碼:
[Ctrl+A 全部選擇 然后拷貝]
uploadok.asp的源碼:
[Ctrl+A 全部選擇 然后拷貝]
inc_clsUpload.asp的源碼:
[Ctrl+A 全部選擇 然后拷貝]
inc_set.asp的源碼:
[Ctrl+A 全部選擇 然后拷貝]
四、商業(yè)應(yīng)用中的問題
優(yōu)點(diǎn):1.支持多種發(fā)送郵件組件; 2.支持發(fā)送多附件。
缺點(diǎn):1.對附件大小沒有限制; 2.如果附件已經(jīng)存在于服務(wù)器上,無法再上傳; 3.對填寫的表單信息是否為空,沒進(jìn)行判斷;
五、注意事項(xiàng)
本程序主要目的是學(xué)習(xí),不適合用于商業(yè),因?yàn)樵谑褂弥羞有問題存在,當(dāng)然你可以對其進(jìn)行完善再應(yīng)用到商業(yè)上。大家,在使用過程中,如發(fā)現(xiàn)問題,可以到論壇問http://www.95time.cn/bbs,也可以發(fā)email給我cjj8110@hotmail.com(也是我的MSN地址)。最后,感謝各位兄弟幫忙測試。Jmail部分代碼已測試通過,用CDO發(fā)附件,及其它發(fā)信組件還沒有測試,由于條件有限,只能到此為止了。
還有一點(diǎn),在存入程序文件的目錄下,需要建一文件夾attachmentfiles(用于存放附件),此文件夾是必須的。
全部代碼請點(diǎn)擊此處下載
出處:藍(lán)色理想
責(zé)任編輯:cjj
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|