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