自作のScriptを動かしていたら、
replaced vertical whitespace in Subject header with space;
this will become fatal in a future version at XXXX.pl line XXX.
なんて警告メッセージが表示される。色々調べてみると原因は、 Email::MIME パッケージ。
メールは、古臭い時代の名残りもあって、メールヘッダ1行は、 「最悪でも1000文字程度(出展?)で、普通は 78 文字より長くは しないほうがいい」という規定。
使っているメールの文字は、40文字程度だけれども、Subject部は、 MIMEエンコードされるから、簡単に長くなる。
#!/usr/bin/perl
use Email::MIME ;
use Jcode ;
print Email::MIME->create(
header => [
From => 'foo@bar.com' ,
To => 'baz@bar.com' ,
Subject => Jcode->new( "...(たっぷり)...")->mime_encode ,
] ,
attributes => {
content_type => 'text/html' ,
charset => 'ISO-2022-JP' ,
encoding => '7bit' ,
} ,
body => "あいうえおabcde" )->as_string ;
これを動かすと、
replaced vertical whitespace in Subject header with space;
this will become fatal in a future version at zz.pl line 5.
From: foo@bar.com
To: baz@bar.com
Subject: =?ISO-2022-JP?B?...?= =?ISO-2022-JP?B?...?=
Date: Sun, 2 Mar 2014 22:42:40 +0900
MIME-Version: 1.0
Content-Type: text/html; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit
あ...de
といった結果となる。 本来なら、MIME-Encode された長い行は、vertical whitespace(\n)で 折り返される。しかし、space に置き換えられて、 きわめて長い1行となっている。
改めて、Email::MIME には、以下のように書いてある。
Revision history for Perl extension Email::Simple
2.203 2014-02-14 21:56:14-05:00 America/New_York
- translate vertical whitespace in headers
into horizontal whitespace, with a warning
今まで警告メッセージが表示されていなかったのは、2/14更新だからか...
ということで、改行を空白に置き換えてもいいのかなぁ...メールは正しく送られてはいるんだけど...
postfix の場合は....
line_length_limit (デフォルト: 2048 bytes) ...
header_size_limit (デフォルト: 102400 bytes) ....
たしかに、今時のMTAは、そんなの正しく処理するようには思うけど...
ちなみに、 line-feed を vertical whitespace と呼ぶこともあるということを、初めて知った...