M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2006年12月27日 12:50

Shuriken+MIME::Entity+「utf8」は注意。「UTF-8」を使おう

このエントリーをはてなブックマークに追加 mixiチェック

perl の CGI で、MIME::Entity を使い、メールヘッダなどを自動生成させて楽ちんメール送信をしていたのですけれども、ちょっとした要望があって、UTF-8 でメール送信するようにって言うことだったんで、そうやって作っていたのですけれども、僕の使っている Mozilla Thunderbird では平気なのに、Shuriken だとバケラッタだというのです。

いろいろ調べた結果、

sub mkmailsubject { 
  my $enc       = shift;
  my $subject_j = shift;
  my $tmp = '';
  $tmp = encode_mimeword($subject_j, 'B', $enc) if $subject_j;
  return $tmp;
}

こんなルーチンなんですが、

$enc = 'utf8'; のとき、

=?UTF8?B?44K344Os44Oz44Gv5YOV44Gr44Gv54Sh55CG44GL44KC44K344Os44Oz?=

これが Shuriken で化けるようです。

$enc = 'UTF-8'; のとき

=?UTF-8?B?44K344Os44Oz44Gv5YOV44Gr44Gv54Sh55CG44GL44KC44K344Os44Oz?=

なって、Shuriken でデコードできます。ていうか、他のメールソフトが、該当部のエンコーディングを強力に解析している予感。

Perl のイディオムで、「utf8」て言うのがあるからついつい使っちゃいがちですが、ちゃんと「UTF-8」ていう文字列を発生させた方がいいですよね。ここの他にも、ヘッダの別の箇所でも

Content-Type: text/plain; Charset=UTF-8

て文字列発生させるのに使いますし。

具体的にはこんなんなります。

  my $enc = 'UTF-8';
  my $oMime = MIME::Entity->build(
    Type     => 'text/plain',
    Charset  => $enc,
    Encoding => '8bit',
    From     => $from,
    To       => $to,
    Cc       => $cc,
    Bcc      => $bcc,
    Subject  => mkmailsubject($enc, $subject),
    Data     => $message,
  );

他に何が指定できるかというのは、

MIME::Entity - class for parsed-and-decoded MIME message - search.cpan.org [search.cpan.org]

参照。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/1926

コメントする