Perlでsendmailコマンドを使いメールを送る方法

提供: Programming-Knowleodge.com
移動先: 案内検索

Perlでsendmailコマンドを使いメールを送る方法を述べています。
SMTPを使って送る方法は、まだ書いていません。そのうち書きます。



方法

Perlでメールを送るにはopen関数を使いsendmailコマンドにパイプで渡す必要があります。
下記のようにスクリプトに記述すると、簡単にメールを送れます。

 my $SDML
 open $SDML,"| /usr/sbin/sendmail -t -i";
 print $SDML "From: kouki1@programming-knowledge.com\n"; #差し出しアドレス
 print $SDML "To: kouki2@programming-knowledge.com\n"; #宛先アドレス
 print $SDML "Subject: Test\n";
 print SDML "Content-Transfer-Encoding: 7bit\n"; #メール本文の格納方法 標準は7bitを指定
 print $SDML "\n";
 print $SDML "Hello sendmail from perl\n"; #本文
 close $SDML;

日本語のメール送る

本文に日本語文字を使用したい場合、Jcode.pmencodeモジュールを使用します。
Encodeモジュールを読み込むには、下記の二文で読み込みます。

 use Encode;
 require './Jcode.pm';

実行時にエラーがでるようなら、cpanでモジュールを追加してください。


日本語のメールを送る関数

use Encode;
require './Jcode.pm';
sub sendmail {
	($sendmail_cmd_path, $from, $to, $add_header, $subject, $msg) = @_;
	open(SDML,"| $sendmail_cmd_path -t -i") || die 'sendmail error';
	&Jcode::convert(\$msg,'jis');
	&Jcode::convert(\$msg, 'jis');
	
	$subject =~ s/\n//;
	$to =~ s/\n//;
	$from=~ s/\n//;
	chomp($subject);
	chomp($add_header);
	$subject = encode('MIME-Header', $subject);
	print SDML "MIME-Version: 1.0\n";
	print SDML "From: $from\n";
	print SDML "To: $to\n";
	print SDML "Subject: $subject\n";
	if ($add_header ne '' and $add_header =~ /^((.*:.+)\n?)+$/) {
		print SDML "$add_header\n";
	}
	print SDML "Content-Transfer-Encoding: 7bit\n";
	print SDML "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n";
	print SDML $msg;
	close SDML;
}

関数の使い方

sendmail('/usr/sbin/sendmail', 'sendmail', 'k-shiroishi@nk-g.co.jp', '', 'こんにちわ', '日本語でメールを送ります!');
引数一覧
引数 解説
第1引数 sendmailコマンドへのパス
第2引数 差出アドレス
第3引数 宛先アドレスを指定する。
複数の宛先がある場合は,k-shiroishi@nk-g.co.jp,k-shiroishi2@nk-g.co.jpのように指定する。
第4引数 追加ヘッダ。メールを送る際に、Subject、From,To、以外のヘッダを使いたい場合はここに指定します。

BCCを指定してメールを送りたい場合は次のようにします。
"BCC: kouki1@programming-knowledge.com,kouki2@programming-knowledge.com,kouki3@programming-knowledge.com"
複数のヘッダが必要な場合は改行コードを含めます。
"BCC: kouki1@programming-knowledge.com\nCC: kouki2@programming-knowledge.com,kouki3@programming-knowledge.com"

第5引数 subject メールの件名を指定します。
第6引数 メールボディ メールの本文を指定します。