編寫對于SendMail的CGI
發(fā)表時間:2024-02-08 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在UNIX主機上我們可以很輕易地通過編程來發(fā)送EMAIL,有時我們需要把從表單上得來數(shù)據(jù)整理后發(fā)送到一個信箱里,例如來訪者的留言,在線申請。 在UNIX系統(tǒng)中通常會有一個 sendmail 程序用來發(fā)送EMAIL的,這是一個十分復(fù)雜的電子郵件系統(tǒng),但我們在CGI編程中用它來發(fā)送EMAIL是十分...
在UNIX主機上我們可以很輕易地通過編程來發(fā)送EMAIL,有時我們需要把從表單上得來數(shù)據(jù)整理后發(fā)送到一個信箱里,例如來訪者的留言,在線申請。
在UNIX系統(tǒng)中通常會有一個 sendmail 程序用來發(fā)送EMAIL的,這是一個十分復(fù)雜的電子郵件系統(tǒng),但我們在CGI編程中用它來發(fā)送EMAIL是十分簡單的事,具體的操作是打開一個通道,把輸出的信息作為sendmail 這個程序輸入
代碼如下:open (MAIL," /usr/sbin/sendsendmail zjxyz@XXXX.XXX"); #注意其間的空格
print MAIL $msg
close MAIL;
這樣我們就可以把變量$msg中的內(nèi)容通過服務(wù)器上的 sendmail 程序發(fā)送到地址為zjxyz@XXXX.XXX 的信箱中,要注意的是這只是一個簡單的例子,還有一些細節(jié)的地方是需要討論的。
在上述的程序中,郵件的接受者將會收到一封沒有標(biāo)題、沒有回信地址的信件,要想發(fā)出去的信件像樣一點,就必須在發(fā)送內(nèi)容之前送出信頭:請看以下例子:
open (MAIL," /usr/sbin/sendsendmail zjxyz@XXXX.XXX");
print MAIL "To: $toemailn";
print MAIL "From: $fromemailn";
print MAIL "Reply-to: $fromemailn";
print MAIL "Subject: $subjectn";
printMAIL $msg;
print MAIL "nn";
close MAIL;
我們看到的"To:"、"From:"、"Reply-to:"、"Subject:" 就是用來標(biāo)識信頭的,它們郵件程序中不會被當(dāng)作是信件的正文在處理,程序中的換行符號是必需的的。
在這里不得不提一下安全問題,有時我們發(fā)信的的地址是從表單上獲得的,如果不嚴格檢查從表單上獲得的EMAIL地址的合法性,將會給惡意的攻擊者帶來攻擊的機會,讓你的CGI程序執(zhí)行一些破壞系統(tǒng)的操作,后果是非常嚴重的。簡單舉個例子說明:
if ($FORM{'mailto'}=~/(.*)@(.*)/){
。。。。。
。。。。。
。。。。。
}