perlでメール送信する際の文字コード変換について
カテゴリー:Linux
前回の記事で.forwardを使ってメールの自動返信するperlプログラムを実行させる方法を説明しました。
perl内のメール送信部分を作る際に文字コード変換の部分でつまってしまった部分があったので、まとめておきたいと思います。
nkfを利用する方法
最初メール送信部分に以下のようなコードを書いていました。
(変数$fromには送信元アドレス、$toには送信先アドレスが入っている )
open MAIL, "|nkf -j -m0| /usr/sbin/sendmail -f $from -t $to";
print MAIL "From: $from";
print
MAIL "Subject: ようこそ!";
print MAIL "To: $to";
print MAIL "";
print MAIL "ほげほげ";
print MAIL "日本語の本文です。檸檬";
close MAIL;
上のようなコードだと、ターミナルからperlを実行したときには送信できましたが
.forwardからperlを実行したときに、送信できませんでした。
これはperlを実行する環境の違いによってnkfの実行環境が変わっているためだと思います。
そこでnkfを利用せずperl側で変換も行うようにプログラムを作りなおしました。
perlのEncodeモジュールを使用
上のコードではperlのEncodeモジュールを使用しています。
(Encodeモジュールはperl5.8以降で標準モジュール化)
メールのサブジェクトに関しては使用しているサーバのperl5.8.5ではEncodeモジュールで変換できなかったため、あらかじめMIMEエンコーディングしたものを書いています。
use encoding 'utf8';
use Encode ;
open MAIL, "| /usr/sbin/sendmail -f $from -t $to,office@nanbu.com";
print MAIL "From: $from";
print MAIL "Subject:awakko.netへようこそ
";
print MAIL "To: $to";
print MAIL "";
print MAIL Encode::encode ( '7bit-jis' , "日本語のテスト。檸檬");
close MAIL;
なおperl5.8.8以降であればEncodeモジュールはMIMEエンコーディングにも対応しており以下のように書けば変換できるようです。
print MAIL Encode::encode( 'MIME-Header-ISO_2022_JP' ,"Subject: 日本語のタイトル:");
参考サイト
-
http://perldoc.jp/docs/perl/5.8.8/perl588delta.pod
-
http://pmakino.jp/tdiary/20061215.html
-
http://sakaguch.com/utf2.html