人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでメールを(sendmailで)送るスクリプトを作成しています。
しかし、送る文字数が多すぎると↓のエラーになってしまいます。
534 Message header size, or recipient list, exceeds policy limit.
sendmail: Unable to submit message.

エラー内容をWebで調べましたが見つかりませんでした。
どなたか解決方法教えていただけませんでしょうか。

●質問者: kamesann
●カテゴリ:インターネット ウェブ制作
✍キーワード:MESSAGE PHP sendmail Web エラー
○ 状態 :終了
└ 回答数 : 7/7件

▽最新の回答へ

1 ● b-wind
●18ポイント
Message header size, or recipient list, exceeds policy limit

意訳すると、ヘッダのサイズか受信者のリストがポリシーで決められた上限を超えていますよ。


エラーメッセージから推測すると、おそらく多人数に一度に送信しようとしているのではないですか?

sendmail の設定を変えるのも一案ですが、結局いつか上限に引っかかるので、同じメールでも何人かごとに分割して送信してみてはどうでしょうか?

◎質問者からの返答

回答ありがとうございます。

送る相手は一人だけで、一日一通です。文字数は変更できないという条件があります。

(作業ログのようなものを送るので)

翻訳すると受信側の問題といっているように見えるのですが、PHPを実行した直後にでるエラーなので

PHPでおくるsendmailの制限にも感じています。


2 ● b-wind
●17ポイント

あくまでエラーメセージからの推測になりますが、Message body とはなっていないので、本文の文字数とは直接的には無関係です。

また、メッセージ自体は送信側の Sendmail からのようなので、PHPの制限でもなさそうです。

Sendmail の設定を変えても受信側のサーバーが受け取らない可能性もあるので、まずは問題をはっきりさせた方が良いでしょう。


Message header とは To: CC: Subject: 等のヘッダの部分です。これには本文は含まれません。

送信時に何かヘッダーを設定していますか?

たとえば長文の Subject をつける等。

◎質問者からの返答

文字数は多くても5000文字程度なのでSendmailのMaxMessageSize以下であると思います。

ヘッダーへの付加は特別行っていません。Subjectは1?10文字程度です。

あて先も決まったあて先1件なので、変化している要素は本文の文字数くらいなので、

本文だと考えています。


3 ● kurukuru-neko
●17ポイント

>534 Message header size, or recipient list,

>exceeds policy limit.

意味は回答#1の方のto,cc,bcc数が多いエラーです。

確認ポイント(php mail関数)

1. messageで行の改行はしていますか?

2. additional_headers ,additional_parameters

は正しいですか?

php mail関数マニュアル ・ サンプル

http://php.benscom.com/manual/ja/function.mail.php

==========================================

google検索

phpでsendmail送信

http://masago.kir.jp/php20050202.php

◎質問者からの返答

今ためしていますが、中間報告として。

2は問題なさそうです。

1ですが、本文は全く改行していません。

現在わかっていることとして、本文が全角で3000文字未満だと正常に送信できて3000文字以上だとエラーとなります。)

改行していないので1行が3000文字で動作が違うとも言い換えられますね。

ただwordwrapを使ってみたり1000文字で改行してみても動作がかわらないので

やはり本文の文字数を疑っています。


コード的にはこんな感じです

sbjには文字が10文字程度

bodyには日本語の文章で3000文字以上

toはメールアドレス

がはいっています

$body = wordwrap($body, 70);

$sbj = i18n_convert($sbj, "JIS", "SJIS");

$sbj = i18n_mime_header_encode($sbj);

$header="Reply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();

mail($to,$sbj,$body,$header);


4 ● b-wind
●17ポイント

>あて先も決まったあて先1件なので、変化している要素は本文の文字数くらいなので、

>本文だと考えています。

結局のところ試してみないと分からないので、テスト的にほぼ同じ環境で本文を 10 文字程度にしてみて送信できるか見てみてはどうでしょうか?

できれば Sendmail に渡している生データそのものが見れると分かりやすいんですけど。


あと気になったのは、E-mail って一行あたりの文字数に制限があったような?

MIME で添付ファイルにしてみるのも手かもしれません。

◎質問者からの返答

制限は70文字みたいですが、なぜかそれを超えても送信できています。

コードは3の方の部分へ書き込みました。


5 ● b-wind
●17ポイント

まず、本題とは関係ないかもしれませんが、

・wordwrap は日本語を考慮される?

・$_POST['email'] をそのまま使用するのは危険

・$header 中の改行コードは "\r\n" では?

という疑問もあるのですが、


$header の phpversion() の後にも改行を足してみてはどうでしょうか?

◎質問者からの返答

$header 中の改行コード"\r" → "\r\n"

header の phpversion() の後にも改行を足す。

二つやりましたが、結果は変わらずでした。。


1-5件表示/7件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ