« 同じことを考えている人が40人いた。 | メイン | メールふしぎ発見! »

メールヘッダ問題、解決したぜェェ for MT 3.17

Movable Typeを3.17にアップグレードしてから、コメント通知メールがまたおかしなことになっていた。
以前のバージョンにパッチを当てる前のように「差出人が空白で、本文の出だしにメールヘッダが迷い込んだようなメール」がまたまた来るようになってしまった。
そのうえ、自力で編み出した 3.151以前用のパッチを当ててもダメときたもんだ。困った。

しかし、以前のパッチの作者としては、なんとしても新しいパッチも、という意地が……(めらめらめら) 笑

そこで、おかしなメールを再び解析することにした。つまり、以前のバージョンのパッチのみをあてたMail.pmが生成したメールのソースを読んでみた。メールヘッダの途中に改行が2つ、つまり1行空けになっている箇所がいくつか見つかった。

(ここより前のメールヘッダ、略)
Message-ID: <うんたらかんたらなんたら>
MIME-Version: 1.0

Subject: =?ISO-2022-JP?B?WxskQj9LQ2ZMbiVfJWUhPCU4JUMlLxsoQg==?= - The Sky -]=?ISO-2022-JP?B?GyRCPzckNyQkJTMlYSVzJUgkLCFWGyhCTW92YWJsZQ==?= Type 3.17=?ISO-2022-JP?B?GyRCJTIlQyVIJEAkPCRDISohVyRLRWo5RiQ1JGwkXiQ3JD8bKEI=?=

Content-Type: text/plain; charset="iso-2022-jp"

To: foo@bar.net
Content-Transfer-Encoding: 7bit

From: hogehoge@hoge.hoge.jp
X-Anti-Loop-ID: あちょーわちょーあちゃぁー
X-NAS-Language: Japanese
(以下略)
(一部ふざけた文字列がありますが、いわゆるモザイクの代わりとご理解くださいませ)

最初のダブル改行を以てOutlook Expressはメールヘッダを終了して本文が始まったとみなしていたらしいと判明(他はどうか知らないが、少なくともこの点はRFCにちゃんと準拠して作ってありましたね、Outlook Expressは)。

その後、ソースの終わりのほうの改行を付加しつつメールストリームに書き出す部分を何度かいじったがうまくいかず。ふと「3.151まではうまくいってたんだから、3.151にどこか真似できる箇所はないだろうか」と両者のファイルを比較したところ、改行コードとして3.151までは「\n」のみを付け加えていたのに対し、3.17では「\r\n」を付加していたことが判明した。

ということで、である。
3.17での(mt directory)/lib/MT/Mail.pm には

$hdrs->{Subject} =~ s/\r?\n/\r\n/g;
# appended by Reia
$hdrs->{Subject} =~ s/\r\n[^\Z]//g; # 追加行。「行末にないCR・LFコードは削除せよ」の意
# end of addition
$hdrs->{'Content-Type'} = qq(text/plain; charset="iso-2022-jp");

と、以前までのパッチと同じ修正を40行目と41行目の間に挟み込もう。
その上で更に、本来のMail.pm では121~128行目にあった以下の部分(上記の修正で、おそらく3行くらいずれているはず)の「\r\n」を「\n」と書き換える。

for my $key (keys %$hdrs) {
my @arr = ref($hdrs->{$key}) eq 'ARRAY' ?
@{ $hdrs->{$key} } : ($hdrs->{$key});
print MAIL map "$key: $_\n", @arr; #ここの行の"\n"は元々 "\r\n"だった。
}
print MAIL "\n"; #ここの行の"\n"も元々 "\r\n"だった。
print MAIL $body;

(インデントは後日整えます、失礼)

この修正を加えたMail.pmに生成してもらったメールは、ちゃんとSubject:も宛名人も表示されていた。
めでたしめでたし。

しかし、MT3.17ではなぜ「\n」から「\r\n」に宗旨替えしちゃったのやら。「\r\n」でないと正常に動かないメールサーバが結構あったりするのだろうか。そのへん、ちょっと謎かも。Movable Typeの通のかた、もしくはSixapart関係のかたに聞いてみたい気がする。

コメント (20)

Reiaさん、ありがとうございました!
現在外なので、修正は家帰ってからやりますが、
とりあえず記事にはさせていただきました。

毎度他力本願で本当にすいませんです。

Reia:

どういたしましてー。
結果報告も待ってますぜー。

テストしましたー。
ばっちりでした。

本当にありがとうございました。
感謝、感謝でございますm(_ _)m

Reia:

おおー、よかったよかった。どういたしまして♪

実はもっといい解決法がないかなとサーチエンジンで調べたら、逆に同じ問題でお悩みの方を発見したのでここのリンクを教えたんだけど、その方がお使いのサーバがまたロリポップ。

これはMTそのものだけではなく、ロリポップのメールサーバの仕様ともなにか関係があるのかもしれません。

Sixapartさんにお問い合わせしようかとも思ったのですが、無料ユーザにはちょっと敷居が高いみたい。なにせ無料ユーザでもアクセスOKな技術情報交換サイトが今のところ英語onlyなので……(近く日本語版のサイトも予定とのことですが)
ここはロリポップでMTをお使いのexpertな先輩方にちょっと質問してみようかなと思っています。

はじめまして。
いろいろと検索していたのですが、ワタシはCside-Netというところをお借りしており同様の問題に出くわしている方があまりいないようで困っていました。・・・がしかし、コチラのお知恵に従ってみたところ、無事解決いたしました。有り難うございました。感謝です。

Reia:

toycozyさんいらっしゃいませ。お役に立てて嬉しいです。
CSide-Net でも同じ問題が起こるのですね。初めてロリポップ以外で同じお悩みの方に出会いました。他人に相談するときの資料になるので、こういう情報は助かります。

これからもよろしくお願いします。

nekonote:

はじめまして。
xreaサーバを使用しているのですが、3.15の時からsubjectメールヘッダのデコード問題で悩んでおりました。
3.17でいよいよまったくの空欄になり困っていたところ、こちらの記事で見事解決いたしました。
ありがとうございました。

一応ワタクシメは有料ユーザーでございます(^^;)

もしアレでしたら、Sixapart社に問い合わせてみますか?
単純に
「コメント通知のメールがおかしくなるけどどないなっとんのや!」
って言うのでよければすぐにでも出せますが(^^;)
(それだと「お使いのサーバー側のせいです」しか返ってこなさそう)


も少し技術的に突っ込むのであればReiaさんに質問事項を出していただけると助かります。

Reia:

>匿名さん
あら、もしかしてコメントスパム対策のバグが出ちゃったかしら。お名前書いていただけていたのなら、ごめんなさい。
XREAでも起こるしなにやら他のサーバでも起こるのですね。
どうも(少なくとも)今回の現象はロリポップにかぎったことではないみたいで。お役に立てたようで嬉しいです。

>Iranaさん
ならばこのエントリーのURLをそのまま報告いただけるととても嬉しいです。
症状もとりあえずの対処方法も書いてあるんで。

問題は「\r\n」ではなぜだめか、なんですよね。

nekonote:

こんにちは。
3つ上コメントの匿名になってしまったnekonoteです。
クッキー保存の「はい」にチェックせずにコメント入力後確認をすると名前のフォームデータが引き継がれず空欄になってしまい、そのまま投稿すると無記名投稿になるようです(これがコメントスパム対策のバグでしょうか)。気が付かず失礼いたしました。
私が相談したメールソフトの作者の方によると、メールサーバの問題ではなくMTがRFC(インターネット技術仕様文書)に反している、との助言を頂きました。
受信するメーラーによっては正しく受信ができるし……素人には難しいです(^^;

Reia:

>nekonoteさん
次女のお弁当づくりがてらにこんな時間に起きてます(笑)
改行コードについては別エントリー(投稿)で書いたのですが、どうやらMovable TypeがRFCに準拠しようとしてかえって違う結果を招いてしまっている感じですね。

「CR+CR+LF」のような「変な改行コード」が来てしまった場合の処理はメーラーによって異なるようですね。
Outlook Expressは改行が2つきたとみなしてメールヘッダとしての解釈を終了させてしまうようです。
一方、まったく同じメールが転送されるわたしの携帯電話(au)はまだヘッダが続くとみなしていたらしく、タイトルはすべて正常に表示されていましたよ。

あとは「\n」がどこで「CR+LF」と解釈されるかの問題。
これは素人というよりもしかしたらプロでもあれれ?な領域かも。
さて、そろそろ次女のハンバーグを焼くとしますかね(笑)

とりあえずReiaさんの許可をいただきましたので、
Sixapartに以下のような問い合わせをだしてみました。
どんな回答が出る事やら・・・


<問い合わせ文>
3.17にアップデートしたら、コメント通知時に送られてくるメールのヘッダー情報がおかしくなりました。

症状としては
・メールの差出人が空白
・メールタイトルが空白
・メールヘッダーの一部が本文に取り込まれてしまう
といったものです。

環境は

MTをインストールしたサーバー
lolipopのレンタルサーバ(但し、この症状はlolipop以外のレンタルサーバーにも発生しているようです)

メールの受信環境
OutlookExpress6.0

です。

なお、原因と思われる事、現時点での対処法については、以下の記事をご確認ください。

針中野ミュージック - The Sky -: メールヘッダ問題、解決したぜェェ for MT 3.17
http://asayake.main.jp/sky/archives/2005/06/_for_mt_317.html


私もこちらのエントリの対策を施した所症状が発生しなくなりましたので、
原因がMail.pmにあることはほぼ間違いないのではないかと思われます。
ご確認をお願いいたします。

Reia:

Iranaさん、ありがとうございます。助かりますー。
出されたメールの内容で適切だと思います。ナイスですー♪
Sixapartさんからご回答がありましたら、また報告いただけると嬉しいです。

了解です。
一応あちらさんは受付後3営業日以内の回答が目標らしいので、
木曜位には何らかの形でご連絡できると思います。

ご連絡が遅くなりました。
SixApartからは、「調査しますのでMT-check.cgiの結果を教えてください」とのお返事でした。

その他に
・詳しいサーバー環境
・MTのバージョンアップ履歴
・バージョンアップ方法
・使用してるプラグイン

なども教えてくれ、と言われたので一応わかる範囲で答えておきました。

金曜日にメールを返したので、今度の返事は来週になると思います。
とりあえず経過報告でした。

Reia:

Iranaさん、経過報告ありがとうございます。
ということで続報をお待ちしております!

Irana@jigブラウザ:

来た来た来ました、SixApartからの解答がようやく。

結局修正版の3.171をリリースだそうです。

今出先ですので、詳細は帰宅してから…

Irana:

帰宅しました。
sixapartからのメールを転載します。

<本文>
ご連絡が遅くなりましてご迷惑お掛けしております。
Movable Type サポートチームの○○です。

お問い合わせいただいております、通知機能のメールヘッダー部分が文字化けしてしまう問題について、この問題を修正した Movavle Type 3.171 を本日リリースいたしました。
以下、弊社サイトにてご案内しておりますのでご参照ください。

■Movable Type 3.171日本語版の提供を開始
http://www.sixapart.jp/movabletype/news/2005/07/14-1730.html

お手数をおかけいたしますが、3.171 へアップグレードしていただき、問題が解決するかご確認していただけますでしょうか。

もしよろしければ、確認のため、アップグレード後問題が改善されたか、再度ご連絡いただけますでしょうか。

上記にて、ご不明な点がございましたら再度ご連絡いただけますようお願いいたします。
以上、よろしくお願いいたします。


<ここまで>

ということでMT公式見てきましたが、
ほかのバグの修正ついでに直してくれたみたいです。
今日はアップデート作業をする時間がないので、
週末に試して状況確認したいと思います。

Reia:

Iranaさん、ほんと助かりました。
結局デバッグした新バージョンをリリースして対応してくださったのですね。

Iranaさんのblogも拝見したのですが、一番乗りしたかったってお気持ち、なんとなくわかります(笑)

Irana:

ですよね(笑)
まあ、しょうがないですけど。

修正作ったReiaさんが最初で次に私の1・2フィニッシュが、
個人的には美しかったんですが(爆)
他の不具合の件でそう思ってる方がもしかしたらいらっしゃるかもしれませんのでこれ以上いうのはやめますね(^^;)

にしても、Six Apartも公開するタイミングを考えてくれればよかったのに…(ブツブツ)


* trackbacks *

* Drecom RSS *