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ベーススクリプト。