飲み会とCGIとメールと
ひさびさに職場のメンバーとの飲み会にいってきました。ディープな情報収集ができたし、楽しかったです。ただ、ちょっとわがままいったところと、他にいいようがなかったのか反省する点も・・・(汗)そこで、飲みから返って気分転換に、メール送信できるCGIを組みました。# なにかおかしい
セキュリティー対策のため、自宅のメールサーバーは認証つきSMTPにしたいのですが、 一般に転がっているCGIはSMTP認証に対応していません。そこでNet::SMTPとAuthen::SASLを使って実装しました。以下の sendmail 部分にあたるソースです。
sub sendmail {
my ($from, to, $subj, $body) = @_;
my $SMTP;
my $server = 'XXXXXXXXXX'; # メール(SMTP)サーバー
# 文字化けするので、Jcode.pmつかって変換
&Jcode'convert(\$subj,'jis');
&Jcode'convert(\$body,'jis');
# オブジェクトの作成
$SMTP = Net::SMTP -> new($server, # SMTPサーバー名を指定
Hello => $server, # SMTPドメイン名を指定
Timeout => 60); # 接続待ち許容時間(秒)
my $user = "username"; # SMTP認証用ユーザ名
my $passwd = "password"; # SMTP認証用パスワード
if ($SMTP->auth($user, $passwd)) {
#ヘッダ部の組み立て
$SMTP -> mail($from);# 送信元メールアドレスを指定
$SMTP -> to($to); # 宛先メールアドレスを指定
#データ部の組み立て
$SMTP -> data();
$SMTP -> datasend("From:$from"); # 送信元(データ部)
$SMTP -> datasend("To:$to"); # 宛先(データ部)
$SMTP -> datasend("Subject:$subj"); # 件名
$SMTP -> datasend("Mime-Version: 1.0");
$SMTP -> datasend("Content-type: text/plain; charset=iso-2022-jp");
$SMTP -> datasend("Content-transfer-encoding: 7bit");
$SMTP -> datasend("Reply-to: $from");
$SMTP -> datasend("$body"); # 本文
$SMTP -> dataend(); # データ終端、メール送信
$SMTP -> quit; # SMTP接続の終了
}
}
この関数を
#!/usr/local/bin/perl use Net::SMTP; use Authen::SASL; my $mail_subj = "タイトル"; my $mail_body = <<_MAIL_BODY_; _MAIL_BODY_ &sendmail($mail_subj, $mail_body);
とかして呼び出すとうまくいきます。もう一息、送信に失敗したときの処理を加えたいところですが・・・。むむ。
mトラックバックがありません。