2015-11-25 2 views
0

У меня есть база данных подписчиков, которым я бы хотел отправить одно и то же электронное письмо. Я использую Mandrill для отправки электронной почты. Администратор веб-сайта должен ввести тему, сообщение и вложение электронной почты, а затем отправить ее для отправки всем подписчикам.Отправка нескольких писем с mandrill

Я пробовал делать цикл while, который запускает API Mandrill для каждого письма в базе данных. Он работает, но сервер исчерпывается и падает после отправки по 5 электронных писем.

Я также знаю, что, чтобы иметь возможность запускать Mandrill API один раз и отправлять несколько писем, массив «to» в API Mandrill должен быть повторен для каждого адреса электронной почты. То, что я пытаюсь сделать, это получить какой-то цикл, который повторяет массив «to» для каждого письма в API Mandrill, таким образом, запуская весь API один раз и отправляя все электронные письма. Ниже приведен API-интерфейс Mandrill, который я использую для отправки электронной почты.

Поможете ли вы, пожалуйста, помочь мне?

Благодаря

 while($row = mysqli_fetch_assoc($result1)) 
     { 
      $ID = $row['ID']; 
      $name = $row['name']; 
      $surname = $row['surname']; 
      $email = $row['email']; 

      try 
      { 
       $mandrill = new Mandrill('My Key'); 

       $message = array(
        'html' => $message, 
        'subject' => $subject, 
        'from_email' => '[email protected]', 
        'from_name' => 'Silvan Theuma', 
        'to' => array(
         array(
          'email' => $email, 
          'name' => $name, 
          'type' => 'to' 
         ) 
        ),/*This is what I want to repeat for every email*/ 
        'attachments' => array(
         array(
          'type' => $mimeType, 
          'name' => $attachmentName, 
          'content' => $file_encoded 
         ) 
        ),      
       ); 
      $async = false; 
      $ip_pool = 'Main Pool'; 
      $result = $mandrill->messages->send($message, $async, $ip_pool); 
      } 

      catch(Mandrill_Error $e) 
      { 
       // Mandrill errors are thrown as exceptions 
       echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage(); 
       // A mandrill error occurred: Mandrill_Unknown_Subaccount - No subaccount exists with the id 'customer-123' 
       throw $e; 
      } 
     } 
+0

, что Mandrill библиотеки вы используете? –

+0

Я использую библиотеку PHP, загруженную со своего сайта – user3697612

ответ

2

Построить массив получателей в while петле

while($row = mysqli_fetch_assoc($result1)){ 
    $recipients[] = array(
     'email' => $row['email'], 
     'name' => $row['name'] . ' ' . $row['surname'], 
     'type' => 'to' 
    ); 
} 

И передать его Mandrill построить

try{ 
    $mandrill = new Mandrill('My Key'); 

    $message = array(
     'html' => $message, 
     'subject' => $subject, 
     'from_email' => '[email protected]', 
     'from_name' => 'Silvan Theuma', 
     'to' => $recipients, // here 
     'preserve_recipients' => false, 
     'attachments' => array(
      array(
       'type' => $mimeType, 
       'name' => $attachmentName, 
       'content' => $file_encoded 
      ) 
     ),      
    ); 

    $async = false; 
    $ip_pool = 'Main Pool'; 
    $result = $mandrill->messages->send($message, $async, $ip_pool); 
} 

catch(Mandrill_Error $e){ 
    // Mandrill errors are thrown as exceptions 
    echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage(); 
    // A mandrill error occurred: Mandrill_Unknown_Subaccount - No subaccount exists with the id 'customer-123' 
    throw $e; 
} 

И не забудьте добавить preserve_recipients к ложным в массиве $message.

preserve_recipients: или не подвергать все получатель, чтобы «до» заголовка для каждого сообщения электронной почты

+0

, вы попробовали? массив 'to' не повторяется, это массив, содержащий список получателей. –

+0

Спасибо, что похоже на его работу: D – user3697612

+0

Да, извините за предыдущее сообщение, это была ошибка, которую я сделал с кодом – user3697612

Смежные вопросы