2012-03-13 2 views
0

Я использую swiftmailer для отправки электронной почты пользователям, когда кто-то регистрируется на моем сайте. Когда я хочу отправить электронное сообщение им, я использовал ту же функцию, но просто сделал цикл из всех моих членов, чтобы отправить электронное письмо всем им.с использованием swiftmailer для отправки массовой информации

Проблема, связанная с этим, заключается в том, что это время составляет около 120 секунд, когда его только 10-20% проходит через таблицу моих участников. Какой самый быстрый способ исправить это? Могу ли я добавить сон или ???

Код

<?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

yup, фоновые задачи могут выполняться вечно, передний план будет выходить из строя в зависимости от ваших настроек, и вы не должны заставлять пользователя ждать пару секунд. –

ответ

0

Вы должны использовать хрон рабочих мест (Linux) или запланированные задачи (окна), чтобы запустить PHP скрипт отправки почты каждые Х секунд.

Каждый процесс PHP имеет максимальное время выполнения, вы можете его поднять, но это не решит вашу проблему, когда список пользователей станет еще больше.