<< MHP2G 早くも100万本突破! 〜ひと狩り行こうぜ〜 | main | PHP での NULLバイトのバイナリデータ生成 〜困ったときの pack関数〜 >>

届かない mailto 〜DoCoMo 改行コードの罠〜

GW 前は久々に障害にやられて(しかも 3連発)全く余裕がなかったのですが, 最近ようやく落ち着いてきました。
さて, また mailto 絡みですよ。

サイトから mailto経由でメーラー立ち上げて画像添付して送信すると画像が登録されるというよくあるアレ。
この機能を実装したんですが, とある端末から画像が登録できないとのユーザサポートメールが。

ちょうど同じ端末があったのでメーラー立ち上げて画像添付してメールを送信...

「送信しました」

そりゃ送信できるよねぇ, テストもちゃんとしたんだし............って, あるぇ?

いくら待てどもサーバにメールが届かない。
試しに自分の携帯で画像投稿してみると...メール届きます。
さっきの端末で画像投稿すると...メール届かない。

ヘ(゚д゚)ノ ナニコレ?
色々試してみると, どうやら DoCoMo の N, Pシリーズの端末からだとメールが届かない模様。
tcpdump で 25番ポート監視してみましたが, パケット自体流れている形跡もなし。
他の端末だとちゃんとメールは届く。ログにも残る。

N, Pシリーズからのメールだけ上位 FW でフィルタリングされてる?
それとも何か変なヘッダはいてどっかで拒否られてる?
端末からメール送信完了しているから, ネットワークのどこかで止まっているはずなのだが...

と, ふと普通にメールを送るという基本的なことを試していないことに気づき, 普通にメールを送ってみた。

「届いたよ...」

一歩前進。

だけど mailto のリンク経由だと, N, Pシリーズのみやっぱりメールが届かない。
やっぱり mailto のリンクが悪さしているのか...むむぅ。
となると, body か subject が原因か。

( ゚д゚)ハッ! 改行コード!?

mailto の body部は以下の様に改行コードが LF で URLエンコードされていました。

<a href="mailto:xxx@example.com?subject=xxx&amp;body=xxx%0Axxx%0A">

RFC ではメール本文の改行は CR+LF と指定されているので, %0A → %0D%0A に置き換えたところ, mailtoリンクからも無事にメールが届くようになりました。

どうやらこの現象, body部の最後が LF , すなわち %0A で終わっていると起こるようで, body部の改行コードが LF でも一番最後が LF で終わっていなければちゃんとメールが送れます。
CR+LF にしていなかったこっちも悪いっちゃ悪いんですが, それにしてもおかしな挙動。
メーラーのバグだよなぁ, これって。

送信できたと思っていたメールも iモードのメールサーバからエラーで返ってきていました。
...4, 5時間後ですが。

キャリアのメールサーバで何が起こっていたのかは返って来たエラーメールからは知る由もないのですが, 携帯の mailto は本当にトラブルが憑き物です。

mailto ご利用の際にはご注意を。

5/15追記)
[ke-tai.org] ケータイ向けサイトでmailtoを利用する際は改行コードに注意 で取り上げられていたので, もうちょっと突っ込んだ内容を。

まず,
どうやらこの現象, body部の最後が LF , すなわち %0A で終わっていると起こるようで, body部の改行コードが LF でも一番最後が LF で終わっていなければちゃんとメールが送れます。

と書いてましたが, 嘘でした(;・∀・)

body部の途中に LF のみの改行コードがあってもメールは送信できませんでした。
スミマセン, 何か勘違いしていたようです。
メール送りすぎて疲れていたのでしょう。きっと。

ということで, リンク先に書いてある通り bare LF問題で qmail で弾かれている可能性大ですね。
経路のどこかに qmail があればそこでアウトということでしょうか。

今回の構成は, 別サーバで一旦メールを受けて転送される形で, そこの MTA が qmail だったようです。

Received: (qmail 7008 invoked by uid 0); 15 May 2008 19:40:29 +0900
Received: from unknown (HELO mx.example.com) (xxx.xxx.xxx.xxx)
by example.com with SMTP; 15 May 2008 19:40:29 +0900
Received: (qmail 17924 invoked by alias); 15 May 2008 19:40:29 +0900
Received: from unknown (HELO docomo.ne.jp) (xxx.xxx.xxx.xxx)
by xxx.xxx.xxx.xxx with SMTP; 15 May 2008 19:40:29 +0900

多分そこで拒否られていたのでしょう。
転送元サーバは別管理なので調査できなかったのですが, そこで 25番ポート監視したらパケットフローが観測できたものと思われます。

ただ, LF のメールでも mailto から起動して一旦保存した後に送信するときちんと送信できるんですよね。
ということは携帯のメーラーできちんと改行コードを CR+LF に変換して保存してくれているということです。
この変換処理を送信する際にチェックするようにしてくれれば, こんなハマりはしなかったのに。
そういう意味ではメーラーのバグとは言い切れませんが, 不親切なのは確か。

N, Pシリーズのメーラーは実装が一緒らしいので挙動が同じなのは納得です。
ちなみに N504iS で試してみましたが, mailto が LF でも問題なくメールが届きました。
FOMA になってからメーラーの実装が変わったのかも知れません。

何にせよ, こういった挙動はきちんと統一して欲しいものです。
はてブへ追加 この記事のはてブユーザ
Tech > Mobile | comments (0) | - | pagetop↑

Comments

Post your Comment