自作の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 には
改めて、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 と呼ぶこともあるということを、初めて知った…