Я использую следующую функцию phpmailer для отправки 1000+ писем
<?php function sendMail($sendTo,$Subject,$Body){ require_once 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'smtp.example.com;smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'newsletter@example.com'; $mail->Password = 'password'; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->From = 'newsletter@example.com'; $mail->FromName = 'xyz'; $mail->WordWrap = 50; $mail->isHTML(true); $mail->addAddress($sendTo); $mail->Subject = $Subject; $mail->Body = ( stripslashes( $Body ) ); $mail->AltBody = 'Please Use a Html email Client To view This Message!!'; if(!$mail->send()) { $return = 'Message could not be sent.'; // echo 'Mailer Error: ' . $mail->ErrorInfo; } else { $return = 'Message has been sent!'; } return $return; }
и это код, который я использую для вызова функции
foreach ($emails as $email) { $subject = "sample subject"; $body = "sample body"; sendMail($email, $subject, $body); }
размер массива $ emails составляет 1000+, есть ли более быстрый и лучший способ сделать это?
Вам следует начать с чтения документов, предоставленных с помощью PHPMailer, где вы найдете этот пример .
Особо следует отметить, что вы используете SMTPKeepAlive
– вы можете найти преимущество в сортировке своего списка по домену, чтобы максимально использовать повторное использование соединения.
Как сказали zerkms, вы должны отправить на локальный почтовый сервер для лучшей производительности, хотя неожиданно использование параметров mail
или sendmail
в PHPMailer не всегда быстрее, чем SMTP для localhost, в основном потому, что postfix 'sendmail binary открывает синхронное SMTP-соединение с localhost в любом случае – postfix 'docs рекомендуют SMTP для localhost для достижения наилучшей производительности по этой причине.
Если вы отправляете на localhost, не используйте auth или encryption, поскольку накладные расходы вам ничего не помогают, но если вы используете удаленный сервер, используйте tls на порту 587, предпочитая устаревший ssl на порту 465.
Следует избегать обычной отправки непосредственно конечным пользователям – SMTP-клиент в PHPMailer несколько тупой – он не обрабатывает очередь, поэтому любые домены с greylisting или отсрочками доставки для управления трафиком не будут доставлены. лучший подход – использовать SMTP для ближайшего MTA и оставить обработку очереди для этого. Вы также можете получить отскоки от этого, чтобы вы могли удалить плохие адреса из своего списка.
Непроверенный, но это должно сработать.
В основном, он повторно использует исходный объект (таким образом уменьшая выделение памяти).
require_once 'PHPMailer/PHPMailerAutoload.php'; class BatchMailer { var $mail; function __construct () { $this->mail = new PHPMailer; $this->mail->isSMTP(); $this->mail->Host = 'smtp.example.com;smtp.example.com'; $this->mail->SMTPAuth = true; $this->mail->Username = 'newsletter@example.com'; $this->mail->Password = 'password'; $this->mail->SMTPSecure = 'ssl'; $this->mail->SMTPKeepAlive = true; $this->mail->Port = 465; $this->mail->From = 'newsletter@example.com'; $this->mail->FromName = 'xyz'; $this->mail->WordWrap = 50; $this->mail->isHTML(true); $this->mail->AltBody = 'Please use an HTML-enabled email client to view this message.'; } function setSubject ($subject) { $this->mail->Subject = $subject; } function setBody ($body) { $this->mail->Body = stripslashes($body); } function sendTo ($to) { $this->mail->clearAddresses(); $this->mail->addAddress($to); if (!$this->mail->send()) { // echo 'Mailer Error: ' . $this->mail->ErrorInfo; return false; } else { return true; } } } $batch = new BatchMailer; $batch->setSubject('sample subject'); $batch->setBody('sample body'); foreach ($emails as $email) { $batch->sendTo($email); }
Переместите функцию в c ++ через cgi. Слайд-версия c ++ была бы гораздо более надежной, чем первая работа с картой http. http://www.cplusplus.com/forum/windows/86562/ Но PhP уже использует хеш-таблицу для своего ассоциативного массива, поэтому вы больше не будете получать скорость с помощью хеш-таблицы. Таким образом, вы действительно являетесь максимальным в своей веб-среде. Отбросьте его на системный уровень, а c – ваш самый быстрый / самый быстрый выбор. Если вы действительно не талантливы с ассемблером.