PHPでメール送信のテストをしています。


数千件のメールを一括配信することを想定し、自分宛のメールアドレスにmb_send_mailで送信しています。

しかし、自分が利用しているメールアドレスとはいえ、一度に数千~1万件のメールを
受信しようとすると、遅延が発生します。
(おそらくメールアドレスを設定しているサーバが制御しているのかも知れません)

過去にメール配信について質問した際、sleepなどを使って間隔を開けて送信することを
アドバイスいただきましたが、それをしても遅延が発生します。
その為、正確な配信速度が測れず、どの件数までを配信可能基準とするか決められません。

そこで質問ですが、どういう環境・やり方で開発テストするのが良いのでしょうか?
スパム・迷惑メール扱いにならずにテストできる方法を教えて下さい。
(現在は、さくらインターネットの共有サーバとメールアドレスでテストしています)

回答の条件
  • 1人2回まで
  • 登録:2008/04/22 01:26:22
  • 終了:2008/04/26 20:59:12

回答(4件)

id:sterwars22 No.1

sterwars22回答回数363ベストアンサー獲得回数02008/04/22 03:41:31

他人の迷惑になるので、専用サーバーでやってください。

id:kt26

ひと言レスありがとうございます。

2008/04/22 11:31:50
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/04/22 12:34:57

ポイント45pt

「どういう方法で」となるとテスト用の環境を用意するほか無いと思いますが。

限界性能を調べるなら専用の環境にして性能劣化の要因をすべて排除するしかないですから。

現在は、さくらインターネットの共有サーバとメールアドレス

同サーバーの他のユーザーの影響が受けるので共有サーバーだと「テスト」には向きません。

取りあえずは、VMWare や VirtualPC で仮想サーバーを立てるだけでもだいぶ違うと思います。


ただ、最終的にはどのような環境で動かすつもりですか?

当然ですが、性能は環境によって異なります。

動作環境が同じく共用サーバーなのであれば、

一度に数千~1万件のメールを

受信しようとすると、遅延が発生します。

この状態が現在の正確な配信速度になると思いますが。

id:kt26

テストサーバはコメントで記述したとおり、ローカル環境のサーバで行うとします。


ただ、最終的にはどのような環境で動かすつもりですか?当然ですが、性能は環境によって異なります。動作環境が同じく共用サーバーなのであれば、


以前、同じような質問をした際「数千~1万件ぐらいなら負荷がかからない」的な返答を受けたので、共有レンタルサーバでも利用できる事を想定しています。個人サイトの会員に対する使用なら、規模も小さくて良いですし、少人数を対象とするなら十分だと思います。


客観的に利用者を想定した場合、メール配信のシステムを作る度に「必ず専用サーバが必要」という条件になれば、誰も利用しないと思うのです。(個人利用、商用問わず)


ですので、一般にも利用されやすいメール配信のシステムを作る為に、色々テストしたり調べたりしています。


>>この状態が現在の正確な配信速度になると思いますが。


果たしてそうでしょうか。他者の作るフリーのメルマガ配信システムなどを見ても、そのような注意事項はありません。私は一箇所(自分のメールアドレス)に集中的に配信しているので、遅延が起きているのではないか?っと思っています。1件配信する毎に1秒sleepしていては、1時間で3600件しか配信されませんし‥。

2008/04/22 15:19:37
id:ken33jp No.3

ken33jp回答回数928ベストアンサー獲得回数132008/04/26 03:56:35

>遅延が発生します。

遅延が起こるのは仕様です。

調べればわかりますよ。

id:kt26

それを聞いているのですが・・・

2008/04/26 20:57:04
id:tomcat_a88 No.4

tomcat_a88回答回数48ベストアンサー獲得回数32008/04/23 20:41:09

ポイント45pt

テスト環境の議論になってしまっているようですが…

(あと、具体的な遅延時間が無いのでわかりませんが)

 

お済みかもしれませんが、とりあえずのチェックをやるために、

mb_send_mail 関数の実行後に、ログを書き出してみてはと

思います。PHPの処理速度で遅延になっている可能性も…?

 

mb_send_mail関数の場合、SMTPサーバーへ接続・切断を毎回して

いますから、それに時間を食われているのでは?

 

次に考えられるのは、サーバー側の力量か制限です。

特にレンタルサーバーであれば、SPAM送信を考慮して一括に出せない

ような(長い時間キューにためる)処理をしているかもしれません。

あとは、受信側のサーバーの問題です。

特定のサーバー(今回はさくら)からのメール転送が不自然に連続する

結果、一時的に受け入れを拒否され、遅延になるという可能性です。

何にしても、専用サーバーでローカルに配送するところからテストを

始めてみると良いのではないでしょうか。

メールを出す時点で(自分のサーバー側で)遅延しているのか、相手の

サーバー側で遅延しているのかから切り分けていくといいと思います。

id:kt26

コメントの方でいただきましたが、こちらも参考にさせていただきます。

2008/04/26 20:57:54
  • id:KeyKey
    http://www.sakura.ne.jp/rentalserver/terms.html
    さくらインターネットの禁止事項に触れてしまう可能性があります。
    負荷がかからないと十分に判断できるまでローカル環境でテストした方が賢明です。

    PHP-MLの「メールマガジンについて」が参考になると思います。
    http://ml.php.gr.jp/pipermail/php-users/2002-July/thread.html#8449
  • id:kt26
    コメントありがとうございます。

    自分宛のメールなので禁止事項には触れないと思いますが、確かに負荷がかかる可能性はありますよね。

    それではテスト環境を「ローカルサーバでのテスト」に変更します。
    ローカルサーバでテストをしていても、自分のメールアドレスにメールを送信すると、
    質問のようなことが起きます。
  • id:tomcat_a88
    コメント欄を読んでいませんでした。^^;

    どのくらいの遅延時間でしょうか。
    その間、ローカルサーバーのメールキュー(mailqコマンド)に残されたままですか。
  • id:kt26
    tomcat_a88さん

    「コメント欄を読んでいなかった」とのことなので、回答オープンは差し控えさせて頂きますね。(よろしければまたご回答下さい)

    遅延時間は10分少々なのですが、一定数(2,3000)配信された後、キューが残されたままのような状態です。それからしばらくしてメーラーで受信すると、再度受信されます。
  • id:b-wind
    >「数千~1万件ぐらいなら負荷がかからない」的な返答を受けた
    負荷がかからない、とメールが相手先に到達する、は別問題。
    送信元とあて先とのメールサーバーの設定次第なので、PHP 側だけではどうしようもないのです。

    >客観的に利用者を想定した場合、メール配信のシステムを作る度に「必ず専用サーバが必要」という条件になれば、誰も利用しないと思うのです。(個人利用、商用問わず)
    だからこそ送信速度を保証するような既存のメール配信システムはASP型が多いのですよ。

    >他者の作るフリーのメルマガ配信システムなどを見ても、そのような注意事項はありません。
    単に想定していないか、保証していないだけでしょう。

    >キューが残されたままのような状態です。
    まさにメールサーバー自体の問題ではないですか?


    メール配信システムは自分も作ったことはありますが、結局のところ相手先にあわせて
    サーバー設定をうまくコントロールするぐらいしか、性能向上の手段は無かったです。

    もっとも、どうしてもメールサーバーの影響を受けたくなければ、PHP から直接配信先の
    メールサーバーに接続してしまう手は無くも無いです。ひどく面倒な上に負荷も高いですが。
  • id:kt26
    コメントありがとうございます。

    >メール配信システムは自分も作ったことはありますが、結局のところ相手先にあわせて
    >サーバー設定をうまくコントロールするぐらいしか、性能向上の手段は無かったです。

    とのことですし、私が調べた限りでもそういう意見が大半でした。


    今回の件は、単に私のテスト環境・テスト方法が悪いだけかと思っていたのですが、
    b-windさんとしては「そうではない。それはサーバの問題だ」とのご判断なわけですね。


    メール配信の負荷や速度は別としても、テストする環境をどうにかしないと
    実験のしようがないと思っていましたが、サーバに依存するなら
    サーバレベルで考える必要がありそうです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません