Perlでメールを送る
WindowsサーバーなどでCGIを動かしている場合、Sendmailが入っていない場合があります。
そんな時、
Sendmailコマンドを使わないでメールを送る方法を紹介します。
#!/usr/bin/perl
print "Content-type: text/plain \n\n";
require 'jcode.pl';
$subject = "問い合わせ";
$message = "メール送信";
&jcode'convert(*message,'jis');
&jcode'convert(*subject,'jis');
use Net::SMTP;
$smtp = Net::SMTP->new( 'mail', #---------SMTPサーバ
Hello=>"scoutroll.co.jp"); #---------SMTPサーバのドメインを指定
$smtp->mail('kazan@cu.xdsl.ne.jp'); #---------送信元アドレス
$smtp->to('netcom@alles.or.jp'); #---------宛先アドレス
$smtp->data();
$smtp->datasend("From:kazan\n"); #---------送信元(見かけ)
$smtp->datasend("To:junchan\n"); #---------宛先(見かけ)
$smtp->datasend("Subject:$subject\n"); #----------件名
$smtp->datasend("Date: $yobi, $mday $tuki $year $time_m\n"); #--------日付
$smtp->datasend("$message"); #-----------本文
$smtp->dataend();
$smtp->quit;
print "送信完了";
#日時の取得
sub date_time {
@wdays = ( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
@mons = ( "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
if ($mday<10) {$mday="0$mday";}
if ($min<10) {$min="0$min";}
if ($sec<10) {$sec="0$sec";}
$time_m ="$hourn\:$minn\:$secn";
$yobi =@wdays[$wday];
$tuki =@mons[$mon];
}
当然のことながら、日本語が入りそうなところはJISに変換しています。
ポイントは日付のセットで、
2002年11月13日 (水) 15:03:01
という日時をセットしたい場合、以下のような書式にしなければならない。
Wed, 13 Nov 2002 15:03:01