2011-08-01 13 views
2

私はMIME :: EntityモジュールをPerlで使用してMIMEメッセージを作成します。いくつかのヘッダーはOKにエンコードされているようですが、他のヘッダーは折り畳みに問題があるようです。MIME ::エンティティヘッダーのエンコーディングは正しいですか?

コード:

use strict; 
use Encode; 
use MIME::Entity; 

my %build_params = (
    'Charset' => 'UTF-8', 
    'From'  => encode('MIME-Header', 'Fantasy Email <[email protected]>'), 
    'Subject' => encode('MIME-Header', "A very long subject that will span on multiple lines in the headers, with a leading sp\ 
ace at the beginning of each new line."), 
    'Type'  => 'multipart/alternative', 
); 


my $top = MIME::Entity->build(%build_params); 

$top->print_header(); 

出力:

Content-Type: multipart/alternative; 
boundary="----------=_1312196104-11708-0"; 
charset="UTF-8" 
Content-Transfer-Encoding: binary 
MIME-Version: 1.0 
X-Mailer: MIME-tools 5.427 (Entity 5.427) 
Subject: A very long subject that will span on multiple lines in the 
headers, with a leading space at the beginning of each new line. 
From: Fantasy Email 
<[email protected] .com> 

Subjectは正しく複数行に分割しているようです。 Fromは、comの前にスペースを残しませんが、改行はなくなりました。

この標準的な動作ですか、またはMIME :: Entityにバグが見つかりましたか?

+0

私にバグのようです。主に '.com'の前のスペース。また、作成したものを*正確に*コピーした場合、 'headers 'の後に新しいスペースが追加されたようです。 –

+0

ハム、あなたはカンマの後の二重スペースについて正しいです。これは明らかにバグです。 – jeje

+0

追加されたスペースは両方のヘッダの同じ位置にあるかもしれないので、 'MIME :: Entity'の分割式のバグかもしれません。 –

答えて

1

エンコード:: MIME ::ヘッダー(encode('MIME-Header', ...)と呼ばれます)は、いくつかの行分割(RFC 822で折りたたみと呼ばれる)を行います。

残念ながら、MIME :: Entityは、多分別の方法で、いくつかの行分割も行います。また、Encode :: MIME :: Headerによって生成された改行を取り除きます。それはしかし、スペースを残します。

私はヘッダーのエンコーディングをMIME :: Entityに任せても構いませんが、行分割部分だけを処理するようです。だから私はまだ自分でそれらをエンコードする必要がありますね。回避策として

、私は

my $encoded_from = encode('MIME-Header', 'Fantasy Email <[email protected]>'); 
$encoded_from =~ s/\r?\n\s//g; 

と私のエンコードされたヘッダからライン分割マーカーを削除

今、出力は次のようになります(対象のために同じこと。):

Subject: A very long subject that will span on multiple lines in the 
headers, with a leading space at the beginning of each new line. 
From: Fantasy Email 
<[email protected]> 

Encode :: MIME :: HeaderのようにMIME :: Entity互換モードなどのより洗練されたソリューションがあるのだろうかと思います。