[Perl] MIME::Entityでメール作成時にToのダブルクォートで痛い目

メモ。

そもそも、下の話がなぜ出てきたのか、ちうと。
 http://cast-a-spell.at.webry.info/201005/article_5.html

以下のコードで、正しく折り返しされない。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Encode;
use MIME::Entity;

my $str = q{"abc あいう" ,aaaaaa ,bbbb ,ccccc ,dddddd ,eeeee ,};

my $t = Encode::encode('MIME-Header-ISO_2022_JP', $str);
my $e = MIME::Entity->build(
 'Message-ID:' => '123456.test@localhost.com',
 'To' => $t,
 'Subject' => "aa",
 'Data' => 'here');
print $e->stringify_header();



この原因だが、"abcとなっている箇所の閉じクォートがないため、Mail::Header.pmの_fold_lineメソッドで、ここは改行しちゃだめと判断されて、延々と長く続くのである。

回避方法

#!/usr/bin/perl

use strict;
use warnings;
use Encode;
use MIME::Entity;
use utf8;

my $str = q{"abc あいう" ,aaaaaa ,bbbb ,ccccc ,dddddd ,eeeee ,};

my $t = Encode::encode('MIME-Header-ISO_2022_JP', $str);
my $e = MIME::Entity->build(
'Message-ID:' => '123456.test@localhost.com',
'Cc' => $t,
'Subject' => "aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa aa aaa aaaa ",
'Data' => 'here');
$e->head()->{mail_hdr_modify} = 0;
$e->head()->_insert('To', "To: $t", -1);
print $e->stringify_header();


こうすると、Ccは折り返されないが、Toは折り返されているのがわかる。
先にEncode側で折り返してるんだから、ToやらCCはmodifyしなくていいよ、と明示すりゃいいってことですかねえ。

さてはて。


ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

ちゅに
2011年01月11日 22:53
よこやりです。

Sledge(MVCフレームワークの)ってどんな特徴があるんですか?

もし、よく知ってたらとりあげてください^^
2011年01月13日 00:23
ご期待にそえなくてもうしわけないのですが、Sledgeは使った事ないんですよ。
ここの所、新規案件もないので色々挑戦すらできなしないという状態で(^-^;)
恥ずかしい限りなんですよ。
ちゅに
2011年01月14日 21:20
どうもです^^

また今度走りましょーね♪

この記事へのトラックバック