MIMEエンコード
前回の続きだけど(perlでsmtpサーバーに接続して送信)
問題なのが、意外に文字列処理。
昔は、eucで書いて、Jcodeでsjisやjisに変換していました。
今は、utf8で書いて、Unicode::Japaneseで処理してます。
MIMEエンコードをどうしようかな。MIMEの部分だけ、JcodeかEncodeを使用しようとしたら、処理がすごく遅いという、気になる記事が。([Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ? たまには呪文をとなえてみるか:仕事版/ウェブリブログ)
今のJcodeはEncodeのWrapperだから、どっちも同じ事なんだろうな。(Jcode.pm)
じゃぁどうしようかなと言うことなんだけど。
携帯キャリアによっては少し処理を変えた方が良いかも(携帯/絵文字メール送信(Perl+Encode-JP-Mobile) – yanor.net/wiki)。
いやいや。まずは標準的な機能を導入するのが先だな。
use MIME::Words;
$subject = Unicode::Japanese->new($subject)->jis;
$header .= "Subject: ".encode_mimeword($subject,’B’,’iso-2022-jp’)."\n";
こんな感じにする事にします。
しかし、このままでは長い件名だとそのままなので、ある程度の文字数で改行する必要がある。(http://www.puni.net/~mimori/rfc/rfc2822.txt)
2.1.1. 行の長さの制限
それぞれの行の文字はCRLFを除いて、決して998文字以下でなければならず(MUST)、78文字以下であるべきである(SHOULD)。
これに対応するには、Perlメモのbase64あたりの事をしないとダメなんだなぁ。
簡単に出来ると思ったら、結構しんどそう。
またこれは改めて対応することにする。