使用CGI程式發送電子郵件
在本章将要學習:(1) 如何運作internet電子郵件特性 (2) 如何在UNIX和非UNIX系統下發送郵件 (3) 如何建立發送郵件的Web窗體
一、Intenet郵件入門
目前最常用的是使用簡單郵件傳輸協定(SMTP)将郵件發送出去和連接配接的目标端通常使用郵局協定(POP)或Internet郵件通路協定(IMAP)。
若要發送電子郵件,需要兩樣東西,即郵件傳輸代理或SMTP中繼主機。
郵件傳輸代理(MTA) 負責接收電子郵件并正确地将他們轉發。UNIX系統上常用MTA成為sendmail。
$/bin/echo "Subject:Test\n\nHello,world" | sendmail [email protected]
如果使用windows作業系統,那麼将不具備内置的MTA。不過perl子產品使你能夠直接發送郵件。Net::SMTP子產品可以再沒有介入的MTA的情況下發送郵件,但是你必須知道你的SMTP中繼主機的名字。
正确的SMTP中繼主機名取決于從何處發送你的郵件。如果你從家中發送郵件,那麼你的ISP為你賦予一個SMTP中繼主機名。如果是Web伺服器,那麼就需要該伺服器的中繼主機名。
============================================
二、郵件發送函數
sub send_mail {
my($to, $from, $subject, @body)=@_;
my $sendmail="/usr/bin/sendmail -t -oi -odp";
open(MAIL, "|$sendmail") || die "Can't start sendmail: $!";
print MAIL <<END;
From: $from
To: $to
Subject: $subject
END
foreach (@body) {
print MAIL, "$_\n";
}
close(MAIL);
}
若要使用該函數,隻要這樣用:
@body=("Lower mine,please.", "Thank you");
send_mail('[email protected]' , '[email protected]', 'Taxes', @body);
=====================================================
三、用于非UNIX系統的郵件函數
my($to,$from,$subject,@body)=@_;
use Net::SMTP;
my $relay="relayhost.youisp.com";
my $smtp=Net::SMTP->new($relay);
die "Could not open connection: $!" if (defined $smtp);
$smtp->mail($from);
$smtp->to($to);
$smtp->data();
$smtp->datasend("To: $to\n");
$smtp->datasend("From: $from\n");
$smtp->datasend("Subject: $subject\n");
$smtp->datasend("\n");
foreach (@body) {
$smtp->datasend("$_\n");
}
$smtp->dataend();
$smtp->quit;
若要使用該函數
@body=("lower mine,please.","thanks!");
send_mail('[email protected]', '[email protected]','Taxes',@body);
$smtp=Net::SMTP->new($relay) 這行代碼 用于建立一個稱為"對象"的東西。"對象"實際上并不是一個标量,也不是哈希結構或者數組。$smtp中的值現在代表一個到達郵件程式的連接配接,你可以對這個連接配接進行各種操作。
$smtp->mail(addr) mail函數發送郵件使用的什麼身份
$smtp->to(addr) to 函數用于郵件發送給誰
$smtp->data() data函數指明你準備發送郵件的正文
$smtp->datasend(data) 這個函數用于發送郵件的實際文本。你必須輸出你自己的報頭域(TO: From: 等)。 在報頭與正文之間,還必須輸入一個空行 $smtp->datasend("\n"), 你的郵件正文跟随在這個空行的後面,并且也用$smtp->datasend()來發送。