在UNIX主機上我門可以很輕易地通過編程來發送EMAIL,有時我們需要把從表單上得來數據整理後發送到一個信箱裡,例如來訪者的留言,在線申請。 在UNIX系統中通常會有一個 sendmail 程序用來發送EMAIL的,這是一個十分復雜的電子郵件系統,但我們在CGI編程中用它來發送EMAIL是十分簡單的事,具體的操作是打開一個通道,把輸出的信息作為sendmail這個程序輸入 代碼如下: open (MAIL,"/usr/sbin/sendsendmail
[email protected]"); #注意其間的空格print MAIL $msg close MAIL; 這樣我們就可以把變量$msg中的內容通過服務器上的 sendmail 程序發送到地址為
[email protected] 的信箱中,要注意的是這只是一個簡單的例子,還有一些細節的地方是需要討論的。在上述的程序中,郵件的接受者將會收到一封沒有標題、沒有回信地址的信件,要想發出去的信件像樣一點,就必須在發送內容之前送出信頭:請看以下例子: open (MAIL,"/usr/sbin/sendsendmail
[email protected]"); 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:" 就是用來標識信頭的,它們郵件程序中不會被當作是信件的正文在處理,程序中的換行符號是必需的的。 在這裡不得不提一下安全問題,有時我們發信的的地址是從表單上獲得的,如果不嚴格檢查從表單上獲得的EMAIL地址的合法性,將會給惡意的攻擊者帶來攻擊的機會,讓你的CGI程序執行一些破壞系統的操作,後果是非常嚴重的。簡單舉個例子說明: if ($FORM{'mailto'}=~/(.*)@(.*)/){ 。。。。。 。。。。。 。。。。。 }