大量のメールを送信するPHPのプログラムを教えてください。


3000件のメールアドレスに、全て同じ内容のメールを送りたいと思います。
もちろん、全員にアドレスが見えたりなんてしてはいけません。

1通づつ送るのがいいのかなと思っています。

それをできればPHPで送りたいと思っています。
そんなプログラムはありませんか?

HTMLメールや添付はしません。
メールマガジンの配信として利用したいと思っています。

なお、メールアドレスはCSVファイルであります。

一度に3000件を送信しないで、手動で数回に分けても結構です。

ちなみに、専用サーバを借りているのですが、一括で送信できるメールの件数の目安はどの程度なのでしょうか?

※PHPのmail関数とかでループして送ってもいいような気がするのですが、
スパムフィルタに引っかかりそうな気がするので、その辺に気を使っているものがいいです。

回答の条件
  • 1人2回まで
  • 登録:2007/08/11 02:44:07
  • 終了:2007/08/18 02:45:03

回答(4件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/08/11 02:55:59

ポイント23pt

From 発信者

To  発信者

BCC  XXXXX,YYYYY,ZZZZ

のようにBCCに並べれる数(仕様制限?)だけ並べる。

100件ぐらいは並べれるでしょう。

仕様を調べてみてください。

これをある程度のウエイトをかけて連続して送信する

100件(1通)を30回で送ることになります

ウエイトは2分ぐらいにとると60分で処理が終わります

スパムフィルタに引っかかるのはある程度仕方が

ないと思います。現に、

id:dingding

具体的なプログラムに関する情報を教えてください。

2007/08/11 03:05:40
id:xxxatsxxx No.2

xxxatsxxx回答回数45ベストアンサー獲得回数22007/08/11 03:26:58

ポイント23pt

以下のURLのライブラリを使えば設定のみなので楽です。

http://pear.php.net/package/Mail_Queue

一括で送信できるメールの件数の目安ですが、せいぜい60くらいにした方がいいです。送り先に携帯電話のメールアドレスが多い場合はもっと減らした方が安全です。

CSVのデータはDBに入れましょう。

以下PEARから持ってきたサンプル。(1回で最大50件送信)

require_once "Mail/Queue.php";

$db_options['type'] = 'db';

$db_options['dsn'] = 'mysql://user:password@host/database';

$db_options['mail_table'] = 'mail_queue';

$mail_options['driver'] = 'smtp';

$mail_options['host'] = 'localhost';

$mail_options['port'] = 25;

$mail_options['auth'] = false;

$mail_options['username'] = '';

$mail_options['password'] = '';

$mail_queue =& new Mail_Queue($db_options, $mail_options);

$from = 'user@server.com';

$from_name = "Chief";

$recipient = "user2@server.com";

$recipient_name = "admin";

$message = 'Hi! This is test message!! :)';

$from_params = empty($from_name) ? '"'.$from_name.'" <'.$from.'>' : '<'.$from.'>';

$recipient_params = empty($recipient_name) ? '"'.$recipient_name.'" <'.$recipient.'>' : '<'.$recipient.'>';

$hdrs = array( 'From' => $from_params,

'To' => $recipient_params,

'Subject' => "test message body" );

$mime =& new Mail_mime();

$mime->setTXTBody($message);

$body = $mime->get();

$hdrs = $mime->headers($hdrs);

$mail_queue->put( $from, $recipient, $hdrs, $body );

$seconds_to_send = 3600;

$delete_after_send = false;

$id_user = 7;

$mail_queue->put( $from, $recipient, $hdrs, $body, $seconds_to_send, $delete_after_send, $id_user );


$max_ammount_mails = 50;

$mail_queue =& new Mail_Queue($db_options, $mail_options);

$mail_queue->sendMailsInQueue($max_ammount_mails);

id:dingding

ありがとうございます!

後で、コードをしっかり見てみようと思います。

2007/08/11 03:41:27
id:KUROX No.3

KUROX回答回数3542ベストアンサー獲得回数1402007/08/11 04:13:15

ポイント22pt

■PHPのCGI

http://www.k-sky.biz/mailing.html

■Perlでよいなら

http://asahikawa-s.com/cgi/yomi-db/html/02_11.html

使い方によってはそのままつかえそうな。

メルマガ発行だったら。

>ちなみに、専用サーバを借りているのですが、

>一括で送信できるメールの件数の目安はどの程度なのでし

>ょうか?

専用サーバーなので3000通ぐらいは、ある程度ウエイトを入れれば

問題ないと判断されると思いますが、借りている会社の方針に

よると思います。

id:dingding

ありがとうございます。

2007/08/11 12:14:11
id:minkpa No.4

minkpa回答回数4178ベストアンサー獲得回数552007/08/11 06:07:45

ポイント22pt

http://www.bizassist-jp.com/dmmailer.html

メール一括送信ソフト

  • id:KUROX
    すいません。自作するものだと思ってました。
    既存のをカスタマイズするんでしょうか?

    >1通づつ送るのがいいのかなと思っています

    負荷がかかると思いますよ。
    BCCで1通のほうが、送信先の展開はメールサーバーで
    やってくれると思われるので。
  • id:dingding
    自作か、既に利用できるプログラムがあればそれを使うつもりでいます。※現状プログラムが既にあるわけではありません。

    BCCで展開するのは、知りませんでした。
    ちなみに、その場合、形式が不適切なメールアドレスが含まれる場合、そのアドレス以外の全てのメールに対して送信ができるのでしょうか?

    確か、toに複数設定した場合、一つでもダメなアドレスがあると、他もだめだった気がします。
  • id:KUROX
    BCC路線は駄目かもしれませんね。
    確かにCGIでわざわざ1通ずつ送ると明記されているものが
    ありましたから。

    勉強になりました。
  • id:KUROX
    >形式が不適切なメールアドレスが含まれる場合、そのアドレス
    >以外の全てのメールに対して送信ができるのでしょうか?
    >確か、toに複数設定した場合、一つでもダメなアドレスがあ
    >ると、他もだめだった気がします。

    実際試してみましたが、そういう事実を確認できません。

    Yahooメールで、Toのパターンを調べましたが、
    メールアドレスが存在するものには、メールが送られてます。
    ないものは、デーモンメールとして、送信者に戻ってくるだけ
    です。

  • id:dingding
    Yahooメールなどの場合は、Toに入れられても、それを内部的に解析して分割しているようなことはありえないでしょうか?

    以前何かのプログラムをしたときに、toか、CCか何かに複数メールを設定した場合、ダメなものがあると、全部だめになったような記憶があります。

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

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

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

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