| 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