2012-03-13 25 views
0

誰かが自分のサイトに登録したときに私はswiftmailerを使ってメールを送信しています。 私はそれらのメンバーに電子メールを送りたいとき、私は同じ機能を使いましたが、すべてのメンバーのすべてのメンバーに電子メールを送るためにループを繰り返しました。swiftmailerを使用してバルクメールを送信

私のメンバーテーブルでは、わずか10〜20%の方法で、この時間が約120秒です。これを固定する最速の方法は何ですか?私は睡眠を追加することはできますか???

コードは、あなたがX秒ごとに電子メールを送信するPHPスクリプトを実行するcronジョブ(Linux)またはスケジュールされたタスク(Windows)を使用する必要があります

<?php 
include ('functions.php'); 
connect(); 
require_once 'lib/swift_required.php'; 

$result = mysql_query("SELECT member_id, email, firstname FROM members") 
or die ("Error - Something went wrong."); 

$i = 1; 
while($row = mysql_fetch_array($result)){ 
    echo nl2br("memberid = $row[member_id]"); 
    $useremail = $row['email']; 
    $user_name = $row['firstname']; 
    $transport = Swift_SmtpTransport::newInstance('my smtp server', 25); 

    $mailer = Swift_Mailer::newInstance($transport); 

    $message = Swift_Message::newInstance() 
     ->setSubject('my subject') 
     ->setFrom(array('[email protected]' => 'mydomain')) 
     ->setTo(array("$useremail" =>" $user_name")) 
     ->setBody(
      '<html>' . 
      '<head></head>' . 
      '<body>' . 
       my email body 
      '</body>' . 
      '</html>', 
      'text/html' 
      ); 

    if ($mailer->send($message)){ 
     mail("[email protected]", "ok", "email sent to '$useremail'", "Sent ok"); 
    } 
$i++; 
} 
+1

複数のメールを送信する場合、私はいつもバックグラウンドにタスクを置くので、ユーザーは待機しません。同じくらいの秒数を取る何かのため –

+0

は、例えば 'que'を作成するには?これを行う方法に関するドキュメントはありますか? – user112570

+0

ええ、バックグラウンドタスクは永遠に実行できます。フォアグラウンドは設定に応じてタイムアウトしますので、ユーザーを2秒以上待機させるべきではありません。 –

答えて

0

です。

すべてのPHPプロセスの実行時間は最大ですが、それを上げることはできますが、ユーザーリストがさらに大きくなると問題は解決しません。