22使用cgi程序發(fā)送電子郵件_第1頁
22使用cgi程序發(fā)送電子郵件_第2頁
22使用cgi程序發(fā)送電子郵件_第3頁
22使用cgi程序發(fā)送電子郵件_第4頁
22使用cgi程序發(fā)送電子郵件_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第22學(xué)時使用CGIeb沖浪時,要填寫一個窗體,以便在以后用來發(fā)送電子郵件。這些窗體常常用作信址列表、故障報告、客戶支持、愛好者郵件和其他各種可以想像到的用途。在本學(xué)時中,我們將要介紹如何用Perl程序發(fā)送郵件,并且講述一個簡短的eb頁示例,Web頁。如何建立發(fā)送郵件的Web在你將編程技巧用于以Perl來發(fā)送電子郵件之前,首先必須學(xué)習(xí)一些關(guān)于電子郵件特性如何在Internet上運行的一些知識。在Perl問世之前,在美國的國家計算機(jī)安全委員會(NCSA)尚未注意到eb的遠(yuǎn)大前景并且調(diào)制解調(diào)器的速度還比較慢的時候,全球的許多人就已經(jīng)在使用電子郵件在所謂的UNIX至UNIX拷貝(UNIX-to-UNIXcopy,UUCP)的系統(tǒng)上進(jìn)行通信了。當(dāng)你在這個老式系統(tǒng)上發(fā)送電子郵件時,本地系統(tǒng)把你的電子郵件封裝好,然后轉(zhuǎn)發(fā)給系統(tǒng)鏈中的下一個系統(tǒng),下一個系統(tǒng)又將電子郵件封裝好,轉(zhuǎn)發(fā)給下一個系統(tǒng),如此傳遞下去。線路上的每個系統(tǒng)都要給22-1所示。圖22-1將郵件從一個系統(tǒng)

很明顯,這種郵件傳遞的方法可以稱為存儲與轉(zhuǎn)發(fā)法。后來UUCP系統(tǒng)被別的方法所取代,不過存儲與轉(zhuǎn)發(fā)的基本方法仍然沒有變。當(dāng)你從你的PC發(fā)送電子郵件時,另一個系統(tǒng)負(fù)責(zé)接收該郵件,再將它轉(zhuǎn)發(fā)給另一個系統(tǒng),然后該系統(tǒng)又將郵件轉(zhuǎn)發(fā)給下一個系統(tǒng),直到最后由目標(biāo)系統(tǒng)接收到郵件為止。不過,如今這些協(xié)議完全發(fā)生了變化。目前最常用的方法是使用簡單郵件傳輸協(xié)議(SimpleMailTransportProtocolSMTP)將郵件發(fā)送到系統(tǒng)鏈上(22-2連接的目標(biāo)端通常使用郵局協(xié)議(PostOfficePortocol,POP)或Internet郵件訪問協(xié)議(InternetMessageAccessProtocol,IMAPSMTP 第三部分將Perl用于圖22-2發(fā)送電子郵件時使你

若要發(fā)送電子郵件,需要兩樣?xùn)|西,即郵件傳輸代理或SMTP中繼主機(jī)。郵件傳輸代理(MailTransportAgent,MTA)是駐留在你的計算機(jī)上的一個程序,它通常是你的操作系統(tǒng)所配備的一個程序,負(fù)責(zé)接收電子郵件并正確地將它們轉(zhuǎn)發(fā)。當(dāng)你的操作系MAUNIX系統(tǒng)上的常用MA稱為sendmail。semdmail程序負(fù)責(zé)取出一個電子郵件并確定如何將它傳遞到目的地。上面這個代碼段將一個短郵件發(fā)送到foo@。sendmail程序負(fù)責(zé)為你解決所有難以如果你使用MicrosoftWindows或Macintosh操作系統(tǒng),那么你將不具備內(nèi)置的MA。不過PerlNet::SMTP模塊可以在沒有介入的MA的情況下發(fā)送郵件,但是你必須知道你的SMTP中繼主機(jī)的名字。這個名字是用于發(fā)送郵件的“郵件主機(jī)”的主機(jī)名,當(dāng)你用你的帳戶進(jìn)行登錄時,你將被賦予該主機(jī)名。請索取中繼主機(jī)的名字,并將它寫在某個地方,以后你會用到它。請記住,依靠SMTP中繼的程序必須將正確的中繼主機(jī)內(nèi)置于軟件之中,否則該進(jìn)程將不能運行。SMTP中繼主機(jī)名”取決于你從何處發(fā)送你的郵件。如果你從家中發(fā)送郵件,那么你的家庭Internet服務(wù)提供商(ISP)帳戶為你賦予一個SMTP中繼主機(jī)名。如果你用租用的eb服務(wù)器上的帳戶發(fā)送郵件,那么就需要該服務(wù)器的中繼主機(jī)的名字。當(dāng)郵件從中繼主機(jī)并不知道的一個系統(tǒng)發(fā)送過來,郵件中繼主機(jī)便拒絕轉(zhuǎn)發(fā)該郵件。在下一節(jié)中,我們將要介紹一個新函數(shù),即send_mail,使用這個函數(shù),你就能夠用Perl程序發(fā)送電子郵件。這個函數(shù)雖然非常有用,但同時它也有很大的危險性。將郵件發(fā)送給某個人,將會在一定程序上侵犯他的隱私權(quán)。你會要求郵件的收件人在你的郵件上耗費一定的第22學(xué)時使用CGI程序發(fā)送電子郵 時間和磁盤空間,還會要求你與收件人之間的每個系統(tǒng)為你中繼該郵件。對于一個完全陌生的人來說,這樣做是很不合適的。首先使用眾所周知的地址(比如你自己的地址)測試你的代碼并發(fā)送一些短郵件。這時,隨時都可能產(chǎn)生一些問題,你應(yīng)該設(shè)法避免發(fā)生問題。不要發(fā)送有人主動提供的商業(yè)性電子郵件。這類商業(yè)性電子郵件通常稱為垃圾郵件,這類郵件已經(jīng)成為Internet上的一個令人頭痛的大問題。少數(shù)人喜歡接收這類郵件,而其他人的反應(yīng)則不同,他們有的對垃圾郵件非常反感,有的則痛恨之極。發(fā)送此類郵件的企業(yè)將會成為許多人唾罵的對象。當(dāng)你得到一個郵件地址后,應(yīng)該問一問是否可以在以后向它發(fā)送電子郵件。如果有人要求從你的郵件地址列表中刪除他的地址,那么你應(yīng)該尊重他的要求。無論對方要求還是沒有要求,都不要一次就發(fā)送很長的郵件,要按適當(dāng)?shù)乃俣葋戆l(fā)送。ISP將會終止IS因為你的郵件太大而無法承受,該ISP就會阻塞從你的域發(fā)送過來的全部郵件。如果根本無法向較大的域(如、應(yīng)該提供很好的返回郵件的地址,尤其是在郵件報頭中要寫明這個地址。應(yīng)該確保你的電子郵件的From:(或ReplyTo:)地址正確無誤,尤其是當(dāng)郵件是從一臺計算機(jī)發(fā)送時更應(yīng)保證地址的正確性。你可以使用Perl偽造電子郵件,但是偽造的郵件包含一個返回給你的指針。偽造的郵件會使你陷入巨大的麻煩之中。請始終都使用你自己的郵件中繼主機(jī)。濫用其他系統(tǒng)的郵件中繼主機(jī)會使你的帳戶迅速停用,并使你遭人指控,甚至出現(xiàn)更糟糕的問題。不要將很長的電子郵件或者許多很短的郵件發(fā)送給靠不住的人,這稱為郵件炸彈,可能導(dǎo)致你的帳戶被停用,并引起法律上的麻煩。上面這些建議并非全部僅僅是一些好的網(wǎng)上禮儀。如果違背這些原則,ISP可能將你從它ISPISPISP會IntInternet具有長期的記憶能力。真的發(fā)送過垃圾郵件的人將會被人們長久記住并遭到唾罵。一旦因為發(fā)送垃圾郵件而變得臭名昭著,要想挽回名譽(yù)是很難的。下面各節(jié)將介紹如何編寫一個Perl短函數(shù),供你在CGI里存在一個問題。該函數(shù)運行的方式主要取決于你是否擁有本地MTA(如sendmail程序),或 第三部分將Perl用于如果你擁有UNIX系統(tǒng),并且sendmail可能已經(jīng)配置好了(也許尚未配置好,那么你閱讀UNIX或sendmail,只是因為好奇而閱讀本節(jié)內(nèi)容,這也對你有好處,不過,程序清單22-1中展示的函數(shù)也許對你沒有多大幫助。即使你擁有即使你擁有UNIX系統(tǒng),下一節(jié)“用于非UNIX系統(tǒng)的郵件函數(shù)”也是值得一讀的。下一節(jié)將介紹使用模塊(即面向?qū)ο蟮哪K)的新方法。程序清單22- 第6行:sendmailsendmail程序可能位第8行:$sendmail中設(shè)定的sendmail程序啟動并打開,以便對文件句柄MAIL第9~14行:電子郵件的報頭被寫入MAIL若要使用該函數(shù),只要像下面這樣用4個參數(shù)調(diào)用它:sendmail。如果沒有安裝和配置,請閱讀下一節(jié)“用于非UNIX系統(tǒng)的郵件函數(shù)”,那里介紹的解決方案也可以在UNIX下使用。必須將變量$sendmail改為你的系統(tǒng)上的sendmail/usr/lib,不過它也可以是/usr/sbin,/lib第第22學(xué)時使用CGI程序發(fā)送電子郵 置正確。可以使用mail或pine之類的郵件實用程序來發(fā)送測試郵件。如果這sendmail的安裝很可能不正確。你必須- (From、To、Subject等)- -odq對郵件進(jìn)行排隊,而不是立即將它們發(fā)送出去。如果你愿意,可以不使用本選項。但是,如果有太多的郵件要立即發(fā)送,那么你的郵件系統(tǒng)將會應(yīng)接不暇。使用-odq是一在沒有安裝l之類的內(nèi)置MA的Wdws和其他操作系統(tǒng)下,你會遇到一些復(fù)雜的問題。MA不是個簡單的郵件傳輸工具,試圖用幾行Perl代碼就復(fù)制它的功能,是很不容易首先,使用Perl模塊Net::SMTP,你可以通過Perl運行的任何操作系統(tǒng)來發(fā)送郵件。使用該模塊,你就能夠非常容易地發(fā)送郵件而不會遇到太大的困難。問題是在標(biāo)準(zhǔn)的Perl產(chǎn)品上并沒有安裝該模塊。為了獲得該模塊,必須將它加載到Web服務(wù)器所在的系統(tǒng)上,或者加載到你想發(fā)送郵件的任何位置上。Net::SMTP模塊是libnet組件的組成部分,它包含各種非常有用的網(wǎng)絡(luò)模塊。Libnet組件位于本書所附光盤上。本書的附錄“安裝模塊”提供了相當(dāng)詳細(xì)的如何安裝本書的附錄“安裝模塊”提供了相當(dāng)詳細(xì)的如何安裝Perl模塊的指南。它講述了如何在UNIXWindows和Macintosh操作系統(tǒng)下,安裝各個Per此外,如果你的系統(tǒng)管理員沒有安裝模塊的公用拷貝,你還會在附錄中找到如何安裝模塊的專用拷貝的說明。程序清單22-2顯示了用于不帶MA的操作系統(tǒng)的send_mail函數(shù)。它包含某些非常奇特的新語句,你可能對它們不太熟悉。請務(wù)必要閱讀后面的說明。程序清單22- 第三部分將Perl用于第10行:Net::SMTP對象得以創(chuàng)建,并與正確的中繼主機(jī)相連接,該主機(jī)是你在第9行上第13~234這個函數(shù)令你感到奇怪的第一件事情是$smtp=Net::SMTP->new($relay);這行代碼。$smtp中的值現(xiàn)在代表一個到達(dá)郵件程序的連接,你可以對你感到奇怪的下一件事情是$smtp->mail($from);這行代碼。->用于將一個對象連接到一mail是個使用上一行創(chuàng)建的$smtp對象來調(diào)用的函數(shù)。為了使用Net::SMTP模塊,你并不需要理解對象語句的全部特征,只需順便了解一下就夠了。對于Net::SMTP對象,可以使用的函數(shù)包括下列幾個:$smtp->mail(addr)mail函數(shù)用于指明你發(fā)送郵件時使用的是什么身份。當(dāng)然,有時你可以就你的身份問題撒點兒謊。$smtp->to(addr)toto函數(shù)帶有一個名字列表,那么每人都會收到一個郵件拷貝。這些人的名字列表不一定出現(xiàn)在郵件正文中,BCC。 $smtp->datasend(data)這個函數(shù)用于發(fā)送郵件的實際文本。你必須輸出你自己的報頭域(o:、From:等。報頭域,比如Date:和Received:,是自動生成的。在報頭與正文之間,還必須輸出一個空行—$smtp->datasend(“\n”)。你的郵件正文跟隨在這個空行的后面,并且也用$smtp->datasend( 第第22學(xué)時使用CGI程序發(fā)送電子郵 既然你有了一個郵件發(fā)送函數(shù)send_mail(),那么從eb頁來發(fā)送郵件的其余工作就非常簡單了。只要設(shè)計一個eb頁,編寫一個CTL程序清單22- 用于發(fā)送電子郵件的HTML窗 第三部分將Perl用于在上面這個代碼中的小程序中,有幾個問題你應(yīng)該注意。首先,必須將程序清單22-1或22-2中的send_mail函數(shù)插入該程序,使該程序能夠運行。哪個程序清單中的函數(shù)最好,并且適合于你,就使用該程序清單中的那個函數(shù)。其次,注意o:地址是通過硬連線與程序相連接的,正如ebmaster@的情況那樣。必須將這個地址改為你想要將郵件發(fā)送到的那個地址。該地址不是從用戶那里獲得的原因很簡單,因為你不希望用戶使用eb窗體將郵件發(fā)往任意的地址。如果有人濫用你的窗體,將惡意郵件發(fā)送給某個人,那么你和你的系統(tǒng)將成為人們指責(zé)的目標(biāo)。因此這不是個好主意。如果你希望用一個窗體將郵件發(fā)送到多個目的地,請使用下拉列表(或者單選按鈕你提供一個地址選擇表:無論你如何進(jìn)行操作,不要讓實際的o:地址從窗體傳遞過來并用在你的程序中。請傳遞一個沒有問題的值(1至3,并在你的CGI程序中對該值進(jìn)行相應(yīng)的轉(zhuǎn)換,(else。設(shè)計Internet上的電子郵件系統(tǒng)的要求之一是要能夠了解目的地址是否有效。然而這是不可能的。22-1和22-2。從發(fā)送郵件系統(tǒng)的角度來看,它無法看到郵件傳輸鏈的結(jié)尾環(huán)節(jié)。它必須將郵件全部傳遞給傳輸鏈上的第二個系統(tǒng),第二個系統(tǒng)又將郵件傳遞給第三個系統(tǒng),以此類推。這些“傳遞”過程的延遲時間是很重要的,更重要的是,發(fā)送郵件的系統(tǒng)在將郵件送出去后就無法控制郵件了。標(biāo)準(zhǔn)的解決辦法是設(shè)法清除掉顯然無效的地址,無法確定是否有效的地址則屬例外。電Internet標(biāo)準(zhǔn)(RFC-822)有一個標(biāo)準(zhǔn)電子郵件地址的模板。但是,有些符合RFC-822標(biāo)準(zhǔn)的有效地址實際上是無效的,而有些不符合RFC-822標(biāo)準(zhǔn)的地址卻是有效的、可第22學(xué)時使用CGI程序發(fā)送電子郵 編寫對電子郵件地址進(jìn)行匹配的正則表達(dá)式是不行的。例如,表達(dá)式/^[\w]\.)+\w+$/看上去是可行的,它甚至與me@這個地址相匹配。但是,它拒絕下面這個完全有效的電子郵件地址:與符合RFC-822標(biāo)準(zhǔn)的電子郵件地址相匹配的一個正則表達(dá)式長達(dá)4700個字符,因為太長,所以本書沒有將它列出,你也很難鍵入。同時它也無法與Internet上的每個傳輸郵件的地址相若要確定電子郵件地址是否有效,唯一的辦法是將一個郵件發(fā)送到該地址,然后等待對方的答復(fù)。如果由于某個原因,你希望確保對方地址上有人(比如將來將郵件發(fā)送給他,因為他要求發(fā)送,請發(fā)送一個電子郵件,要求他回答。當(dāng)對方的答復(fù)返回時,就知道你發(fā)送了一份有效的電子郵件。在本學(xué)時中,我們介紹了如何從Web頁發(fā)送電子郵件。同時,介紹了_()函數(shù)的兩個版本,它們可以用在任何Pr程序中來發(fā)送電子郵件。我們還講述了Intene問題:能不能使用從瀏覽器中搜集到的信息來獲取Web解答:雖然能夠這樣做看起來是很好的(它可以消除獲取電子郵件地址時的錯誤,但這是不可能的。瀏覽器并不包含用戶的電子郵件地址。CGI模塊中的remote_host函數(shù)返回的值實際上并不是用戶接收電子郵時使用的地址。如果你使用安全的Web事務(wù)處理,那么remote

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論