- ベストアンサー
メールの1行の文字数制限について
フォームから入力された文字をメールで送信する仕組みをPHPで作成しているのですが、1000文字を超える文章を改行せずに入力して、mb_send_mail関数でメールを送信したところ、1000文字以降が文字化けしてしまいました。(メールサーバはsendmailを使用) メールに関する1行の文字数制限はRFCにて規定されているようなのですが、これを回避する方法はないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
メール本文ではなく、添付ファイルとして送るしかないでしょう。その際、base64などのエンコードをすれば、もとの行長とは関係なくなりますから。 ただし、今度は文字コードの問題が生じます。シフトJISのテキストファイルを添付して送ったら、MACの人は読めないかもしれません。JISで添付するとWindowsの人が読むのに(少し)苦労します。 もう一つは、そもそもフォームに入力する際にも見た目には折り返して表示されているのですから、それと同等の位置に改行を入れて、「これは仕様である」と突っ張る。 たいていのメールソフトも、永い行を打ち込むと適当なところで勝手に改行を入れますし。
その他の回答 (2)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
確かに、rfc 2822 で、 「cr/lf をのぞいて 998文字以下でなければならない」 「cr/lf をのぞいて 78文字以下が望ましい」 と規定されていますので、そのままの長さで送るというのは、送信側でどう細工したとしても、中継や受信側で何をされるかわからないと考えるべきでしょう。 そして、これはもともと、SMTP(メール送信プロトコル)で、「1行の最大長は 1000文字(こちらは、cr/lf を含む)」と規定されていることによります。 こちらは、 rfc2821 です。
お礼
回答ありがとうございます。 PHP側の問題というより、SMTPサーバ側の仕様(RFC規定)ということになるようですね。 「裏技」的な解決策がないか、いろいろと検討してみたいと思います。
- a-saitoh
- ベストアンサー率30% (524/1722)
メール本文も何らかのエンコード(base64とか)してしまうという手もありますが。 自動的に改行するか、エラーを出して入力者に訂正を求めるのがお行儀が良いと思います。
お礼
回答ありがとうございます。 現在はエラーを出すようにしているのですが、利用者によっては1行で長文を記述するケースがあるため、何かいい方法がないか検討しているところです。 エンコードで対応できるか検討したいと思います。
お礼
base64にエンコードする方法で解決しました。 メール受信者がMacユーザの方だったので、文字コードの問題は発生しましたが、ShiftJIS形式で読み込んでもらうことで解決してもらいました。 回答ありがとうございました。