- ベストアンサー
PHP文字数により絵文字対応メールが届かない
- 携帯サイトで絵文字メールを送信するPHPプログラムがありますが、文字数が多いとメールが届かない・削除される現象が発生しています。
- メールの内容は同じですが、auでは文章の後半が削除され、docomoではメールが届かない状況です。
- 文字数制限やbase64変換後の文字数も問題ないため、原因が分かりません。qmailを使っており、Linux環境でも同様の現象が発生しています。助言が欲しいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
当方の環境にて、動作確認を行いましたが正常に動作しますね。 3キャリアともに問題ありませんでした。 メール:Sendmail / Postfix (qmail環境は用意できませんでした) 文字コード:SJIS エンコード:BASE64 各端末で制限している文字数以上(バイト)があれば、削除されて届きました。 届かないというのは、qmail -> x なのか、 qmail -> ○ -> x のどちらかと思います。 メールログは正常に通信できたかどうか、履歴残ってますか? また、キャリアに制限をかけられていることはありませんよね。 端末が怪しい場合は、PC->携帯で同じ文字送っても同じ現象になりますか? BASE64の仕様については、お調べください。
その他の回答 (1)
- Dags
- ベストアンサー率78% (11/14)
各キャリアの文字制限は、文字数ではなくバイトでは? BASE64でエンコードされた全角1文字は2バイトではありません。 削除されるメールは、何バイト目で削除されるのか。 届かないメールは、何バイトで届かなくなるのか。 複数の端末でチェックする。 まずは上記3つを調べる必要があるかもしれません。 またキャリアにより5000文字とか記載ありますが、端末によって違いますので、一概に言えません。 確かな情報が欲しい場合は、公式サイトなら直接キャリアに問い合わせる事が可能ですので、お調べください。
補足
早速の回答、ありがとうございます。 複数の端末は持っておらず、各キャリア1機種での確認のみとなってしまいますが、確認を行いました。 docomo[F-09A] :697バイトまではメールが届く。699バイトから届かなくなる。 docomo[SH02B] :694バイトまではメールが届く。695バイトから届かなくなる。 au[SH005] :701バイトまでの文字数が受信できる。702バイト以降は切り捨てられる。 softbank[832SH] :問題なし 入力した文字は改行も入っています。改行込みで、上記のバイト数となっております。 base64でエンコードされた文字(全角・半角共に)は、1文字変換すると4byteなのでしょうか・・? ※非公式なので、キャリア問い合わせはできないようです。
お礼
あ、お礼ってここでするんですね・・ 改めまして、解決することができました。 解決する為の助言を下さり、とても感謝しております。 ありがとうございました!
補足
試して下さったのですね!ありがとうございます! 再度、メールログを確認してみました。 すると、successとなっており、errがでていなかった為に見落としておりましたが、正常に届いているメールと、届かなかったdocomoのメールに関しては、ログが異なっておりました。 -- 届かなかったメール Sep 11 17:12:07 ******* qmail: 1315728727.922774 new msg 31654389 Sep 11 17:12:07 ******* qmail: 1315728727.922840 info msg 31654389: bytes 2327 from <> qp 26719 uid 503 Sep 11 17:12:08 ******* qmail: 1315728728.020001 starting delivery 1930: msg 31654389 to local bounces@******.jp Sep 11 17:12:08 ******* qmail: 1315728728.020051 status: local 1/10 remote 0/20 Sep 11 17:12:08 ******* qmail: 1315728728.165667 delivery 1930: success: did_1+0+1/ Sep 11 17:12:08 ******* qmail: 1315728728.165772 status: local 0/10 remote 0/20 Sep 11 17:12:08 ******* qmail: 1315728728.165814 end msg 31654389 -- 届いたメール Sep 14 10:51:02 ******* qmail: 1315965062.232497 new msg 31654458 Sep 14 10:51:02 ******* qmail: 1315965062.232535 info msg 31654458: bytes 616 from <***@***.jp> qp 17743 uid 0 Sep 14 10:51:02 ******* qmail: 1315965062.358758 starting delivery 2376: msg 31654458 to remote ***@docomo.ne.jp Sep 14 10:51:02 ******* qmail: 1315965062.358803 status: local 0/10 remote 2/20 Sep 14 10:51:02 ******* qmail: 1315965062.358833 delivery 2375: success: ***.***.***.***_accepted_message./Remote_host_said:_250_Message_received/ Sep 14 10:51:02 ******* qmail: 1315965062.358856 status: local 0/10 remote 1/20 Sep 14 10:51:02 ******* qmail: 1315965062.358878 end msg 31654455 ※メールは転送処理をしています。 ログが普通と違うことから、エラーメールがqmailのどこかに展開されているはず、と思って(いまさらですいません・・)探したところ、docomoに関してはエラーメールが存在しておりました! よく見ると、「Line too long」と書いております。 base64でエンコードしたことにより、改行コードも含めて全て1行にされてしまったことが原因のようでした。 phpに「chunk_split」の命令がありますので、そちらを加えてみたところ、正常に届くようになりました! Dagsさん、解決への糸口を下さり、本当に感謝しております。 ありがとうございました!