E-Mail の生成と送信 |
最初の例は Mail::Send モジュールを利用した例です。Mail::Send は MailTools
パッケージに含まれています。MailTools は CPAN
にあります。
http://www.perl.com/CPAN/modules/by-module/Mail/MailTools-1.12.tar.gz
#!/usr/bin/perl # # mail.cgi # # (C)1999 Kaoru Fujita # # *** おそらく UNIX でしか動作しません。*** # use lib './lib'; require 'jcode.pl'; require 'util.pl'; use Mail::Send; # # 定数 # $Title = 'メール送信・サンプル・プログラム'; # CGI の仮想パス $CGIPath = '/cgi-bin'; # プログラム名 use File::Basename; $Program = basename($0); # 日本語コード $Encoding = 'euc'; $CharSet = 'EUC'; # # メインプログラム # *data = parseInput('jis'); # E-Mail のメッセージボディはJIS # テスト用 #$data{'Server'} = 'server.domain.name'; #$data{'From'} = 'from@email.address'; #$data{'To'} = 'to@email.address'; #$data{'Cc'} = 'cc@email.address'; #$data{'Subject'} = 'Just a test'; #$data{'Message'} = "This is a test mai.\nPls ignore this."; sendMail(); thankYou(); exit(0); # # # sub sendMail { my($mail) = Mail::Send->new(); # メールヘッダを作成する。 $mail->to($data{'To'}); $mail->cc($data{'Cc'}); $mail->bcc($data{'Bcc'}); $mail->subject($data{'Subject'}); # メーラー(mailx/Mail/mail)を準備する $mailer = $mail->open(); # メッセージを送信する。 print $mailer $data{'Message'}; # メーラーをクローズする。 $mailer->close(); } # # # sub thankYou { select(STDOUT); print <<END_OF_THANK_YOU; Content-Type:text/html <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$CharSet"> <TITLE>メールを送信しました。</TITLE> </HEAD> <BODY BGCOLOR=\"#ffffff\"> <CENTER><BR> メールを送信しました。 </CENTER> </BODY> </HTML> END_OF_THANK_YOU return; } #--End Of mail.cgi |
<HTML> <HEAD> <TITLE>メール送信</TITLE> </HEAD> <BODY> <FORM action="/cgi-bin/mail.cgi"> <TABLE> <TR> <TD>To: </TD><TD><INPUT type="textfield" name="To" size="24"></TD> </TR> <TR> <TD>Cc: </TD><TD><INPUT type="textfield" name="Cc" size="24"></TD> </TR> <TR> <TD>Bcc: </TD><TD><INPUT type="textfield" name="Bcc" size="24"></TD> </TR> <TR> <TD>Subj: </TD><TD><INPUT type="textfield" name="Subject" size="36"></TD> </TR> </TABLE> <TEXTAREA name="Message" rows="10" cols="50"> </TEXTAREA> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> |
次の例は、SMTP(Simple Mail Transport Protocol) を使って、メールサーバに直接接続してメールを送信します。Net::SMTP を使います。
サンプルスクリプトの $Domain にドメイン名を設定してください。
#!/usr/bin/perl # # mail2.cgi # # (C)1999 Kaoru Fujita # use lib './lib'; require 'jcode.pl'; require 'util.pl'; use Net::SMTP; # # 定数 # $Title = 'メール送信・サンプル・プログラム(2)'; # CGI の仮想パス $CGIPath = '/cgi-bin'; # プログラム名 use File::Basename; $Program = basename($0); # 漢字コード $Encoding = 'euc'; $CharSet = 'EUC'; # ドメイン名 $Domain = 'smtp.domain.name'; # # メインプログラム # *data = parseInput('jis'); # E-Mail のメッセージボディはJIS # テスト用 #$data{'Server'} = 'server.domain.name'; #$data{'From'} = 'from@email.address'; #$data{'To'} = 'to@email.address'; #$data{'Cc'} = 'cc@email.address'; #$data{'Subject'} = 'Just a test'; #$data{'Message'} = "This is a test mai.\nPls ignore this."; sendMail(); thankYou(); exit(0); # # # sub sendMail { # サーバと接続する my($server) = new Net::SMTP($data{'Server'}, Hello => $Domain); unless ($server) { exitError(qq(メールサーバ[$data{'Server'}]に接続できません。)); } foreach ($data{'Cc'}, $data{'Bcc'}) { next unless $_; $recipients = $recipients.',' if $recipients; $recipients = $recipients.$_; } # メッセージの送信 $server->mail($data{'From'}); $server->to($data{'To'}); $server->recipient($recipients); $server->data(); $server->datasend("Content-Type: text/plain; charset=iso-2022-jp\n"); $server->datasend("To: $data{'To'}\n"); $server->datasend("Cc: $data{'Cc'}\n"); $server->datasend("Bcc: $data{'Bcc'}\n") if ($data{'Bcc'}); $server->datasend("From: $data{'From'}\n"); $server->datasend("Subject: $data{'Subject'}\n"); $server->datasend("\n"); # ヘッダの終わり $server->datasend($data{'Message'}); $server->dataend(); # サーバとの接続をクローズ $server->quit(); } # # # sub thankYou { select(STDOUT); local($message) = $data{'Message'}; jcode'convert(*message, $Encoding); print <<END_OF_THANK_YOU; Content-Type: text/html <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$CharSet"> <TITLE>メールを送信しました。</TITLE> </HEAD> <BODY BGCOLOR=\"#ffffff\"> <CENTER><BR> メールを送信しました。 </CENTER> <HR NOSHADE> SMTP Server: $data{'Server'}<BR> To: $data{'To'}<BR> Cc: $data{'Cc'}<BR> Bcc: $data{'Bcc'}<BR> From: $data{'From'}<BR> Subject: $data{'Subject'}<BR> Message: <BR> <PRE> $message </PRE> <HR NOSHADE> </BODY> </HTML> END_OF_THANK_YOU return; } #--End Of mail2.cgi |
<HTML> <HEAD> <TITLE>メール送信(2)</TITLE> </HEAD> <BODY> <FORM action="/cgi-bin/mail2.cgi"> <TABLE> <TR> <TD>メールサーバ: </TD><TD><INPUT type="textfield" name="Server" size="24"> <FONT COLOR="Red">(SMTP サーバを指定してください)</FONT></TD> </TR> <TR> <TD>From: </TD><TD><INPUT type="textfield" name="From" size="24"></TD> </TR> <TR> <TD>To: </TD><TD><INPUT type="textfield" name="To" size="24"></TD> </TR> <TR> <TD>Cc: </TD><TD><INPUT type="textfield" name="Cc" size="24"></TD> </TR> <TR> <TD>Bcc: </TD><TD><INPUT type="textfield" name="Bcc" size="24"></TD> </TR> <TR> <TD>Subject: </TD><TD><INPUT type="textfield" name="Subject" size="36"></TD> </TR> </TABLE> <TEXTAREA name="Message" rows="10" cols="50"> </TEXTAREA> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> |
ここでは具体例は示しませんが、POP(Post Office Protocol) を使って、POPサーバに接続してメールを受信することもできます。この場合は Net::POP3 を使います。
cgi-bin/mail.cgi
cgi-bin/mail2.cgi
cgi-bin/lib/util.pl
docs/Samples/mail.html
docs/Samples/mail2.html