2008年10月08日

MIME::Base64によるsendmail@UTF-8


Perlによるメール送信において,subjectが文字化けする件について。

先生から「MIME::Base64を使ってUTF8でsendmail」というサイトを紹介してもらったので,参考にしながらスクリプトを作った。しかし!

use MIME::Base64;

$subject="メールタイトル";
$encoded_subject = encode_base64($subject);

とするも,受信したメールの件名が

Subject : 44Oh44O844Or44K/44Kk44OI44Or

となってしまう。でもちゃんと変換はされている模様。
問題は,そのまま表示されていること。
前後に「=?utf-8?B?」と「?=」を付ければいいんじゃない?と思い,

$subject="メールタイトル";
$encoded_subject = encode_base64($subject);
$mail_subject = "=?utf-8?B?" . $encoded_subject . "?=";

とすればうまく行くはず!と思ったんですが,まだうまく行かない。
件名部分が勝手に改行されてしまう。
初心に戻り,「MIME::BASE64」をじっくり読んでみたら、

返されるエンコードされた文字列は76文字を越えないように分割され、
空文字列でなければ$eolが最後に付きます。
もしエンコードされた文字列を複数の行に分割したくない場合は、
2番目の引数として空白の文字列を渡してください。

とのこと。改行されたくなかったら空文字を入れろと!

$subject="メールタイトル";
$encoded_subject  = encode_base64($subject, "");
$mailsubject = "=?utf-8?B?" . $encoded_subject . "?=";

という訳ですんなり解決。


※追記:最終的に書いたsendmailベーススクリプト


コメントする