PerlでSMTPモジュールを使ったメール送信(バージョンアップ版)
先日のサンプルの漢字エンコード部分(サブジェクトとメール本体メッセージ)を標準モジュール(Encode.pm)を使って書き換えてみました。
#!/usr/bin/perl -w use Encode qw(from_to encode); use Net::SMTP; use strict; #メールアドレス設定 my $from = 'FromAddress@aaa.co.jp'; my $mailto= 'ToAddress@bbb.co.jp'; #サブジェクト設定 my $subject = 'テストメール'; from_to($subject, 'shiftjis', 'iso-2022-jp'); encode('MIME-Header-ISO_2022_JP', $subject); #メールヘッダー設定 my $header = << "MAILHEADER"; From: $from To: $mailto Subject: $subject Mime-Version: 1.0 Content-Type: text/plain; charset = 'ISO-2022-JP" Content-Trensfer-Encoding: 7bit MAILHEADER #メール本体設定 my $message = << 'MAILBODY'; メッセージ1 メッセージ2 MAILBODY #文字コードをJISに変換 from_to($message, 'shiftjis', 'iso-2022-jp'); #メール送信オブジェクト設定 my $smtp = Net::SMTP->new('mailhost'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } #メール送信 $smtp->mail($from); $smtp->to($mailto); $smtp->data(); $smtp->datasend($header); $smtp->datasend($message); $smtp->dataend(); $smtp->quit;
追記:
結構アクセスがあるみたいなので、もうちょっと説明を加えておきます。
ソースカスタマイズのポイントは、以下の通り。
- メールアドレス設定の内容を送信したいアドレスに変更する。
- メール送信オブジェクト設定のホスト名(or IPアドレス)をあなたが使っているSMTPサーバーに変更する。
- 後は、ご自分用にサブジェクト内容とメール本文内容を変更して下さい。
メール送信プログラムのポイントは、以下の通り。
- サブジェクトはエンコードする。
- 本文の漢字コードはJIS(ISO-2022-JP)コードにする。
- メールヘッダーとメール本体の境目に空行(改行)を入れる。
- はじめに、サブジェクトをJISコードに変換する。
- 『from_to($subject, 'shiftjis', 'iso-2022-jp');』の部分。
- それを、BASE64という形式でエンコードする。
- それの、前後に =?iso-2022-jp?B? と ?= を付加する。
- 『encode('MIME-Header-ISO_2022_JP', $subject);』の部分。
- 元データを6ビットずつに分割する。
- 6ビットに満たない分は0を追加して6ビットにする。
- この6ビットを A〜Z、a〜z、0〜9、+、/ の表示可能コードに4文字ずつ割り振る。
- 最後が4文字に満たない場合は、 = 記号を追加し4文字にする。