質問

次のような形式のメール件名があります。

=?utf-8?B?T3.....?=

電子メールの本文は utf-8 Base64 でエンコードされており、正常にデコードされています。現在、Perl の Email::MIME モジュールを使用して電子メールをデコードしています。

=?utf-8 区切り文字の意味は何ですか?また、この文字列から情報を抽出するにはどうすればよいですか?

役に立ちましたか?

解決

encoded-word トークン(に従って RFC2047) は、一部のヘッダーの値で発生する可能性があります。それらは次のように解析されます。

=?<charset>?<encoding>?<data>?=

この場合、文字セットは UTF-8 で、エンコーディングは次のとおりです。 B これはbase64を意味します(他のオプションは Q つまり、Quoted Printable を意味します)。

これを読み取るには、まず Base64 をデコードしてから、UTF-8 文字として扱います。

詳細については、さまざまなインターネット メール RFC もお読みください。 RFC2047.

Perlを使っているので、 エンコード::MIME::ヘッダー 役立つかもしれません:

概要

use Encode qw/encode decode/;
$utf8   = decode('MIME-Header', $header);
$header = encode('MIME-Header', $utf8);

抽象的な

このモジュールは、RFC 2047 MIMEヘッダーエンコーディングを実装します。3つのバリアントエンコード名があります。Mime-Header、Mime-B、Mime-Q。違いを以下に説明します

              decode()          encode()  
MIME-Header   Both B and Q      =?UTF-8?B?....?=  
MIME-B        B only; Q croaks  =?UTF-8?B?....?=  
MIME-Q        Q only; B croaks  =?UTF-8?Q?....?=

他のヒント

Encode モジュールがそれを処理すると思います MIME-Header エンコーディングがあるので、これを試してください:

use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);

チェックアウト RFC2047. 。「B」は、最後の 2 つの「?」の間の部分が Base64 でエンコードされていることを意味します。「utf-8」は当然、デコードされたデータが UTF-8 として解釈される必要があることを意味します。

MIME::単語 MIME ツールのものもこれに適しています。エンコードで問題が発生し、エンコードが失敗した一部の文字列では MIME::Words が成功したことがわかりました。

use MIME::Words qw(:all);
$decoded = decode_mimewords(
    'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);

これはヘッダーの文字セットラベル付けの標準拡張であり、で指定されています。 RFC2047.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top