Я пытаюсь внедрить swiftmailer в эту почтовую систему.у моего клиента около 300 тыс. активных писем, которые нужно отправлять на регулярной основе.изначально система была настроена на функцию sendmail и php mail ().С тех пор я установил последнюю версию postfix.
, возможно, мои ожидания были слишком высоки, но у меня сложилось впечатление, что эта вещь может поставить много писем в очередь FAST, что и является тем, что янеобходимость.вся обработка и регулирование скорости выполняется на стороне постфикса, поэтому было бы здорово поставить их в очередь так быстро, как мои настройки постфикса.
, хотя я мог бы реализовать методы для вставки контакта непосредственно в очередьЯ бы предпочел ограничить ввод сообщений электронной почты, поступающих в очередь, на основе различных параметров, таких как глобальные скорости отправки для сервера smtp.
приведенный ниже код является просто базовым для тестирования.он просматривает 30 отдельных почтовых учетных записей SMTP, каждая со своими собственными тарифными свойствами.я пытаюсь вытащить максимальное количество писем из дБ на крону, затем отправить все, используя batchsend()
, затем перейти к следующей учетной записи smtp, отправить максимум и т. д.
технически это делаетработать, однако это действительно медленно.со скоростью 60 / мин на учетную запись smtp, это занимает около 15-20 секунд каждая, что, очевидно, не будет работать и совсем не то, что я ожидал.медленный?Серверы SMTP кажутся в порядке, без перегрузки или что-то в этом роде.нет постфиксных ошибок, ничего очевидного.
как только письма попадают в очередь, я позволяю postfix работать, это волшебно.это ставит его в очередь с разумной скоростью, что становится трудным.я знаю, что swiftmailer - волшебное решение всех моих проблем, но я уверен, что отправка должна быть быстрее, чем на самом деле.какие-либо идеи или предложения?
$query = "SELECT * FROM `smtp`";
$result = mysql_query($query) or die(mysql_error());
$num_rows1 = mysql_num_rows($result);
while($row = mysql_fetch_array($result)){
$smtp = $row['ip'];
$login = $row['user'];
$pass = $row['pass'];
$smtp_domain = $row['domain'];
$querya = "SELECT * FROM `mailer_lists` ml JOIN `mailer_controller` mc ON ml.project_name = mc.project_name LIMIT ".$global_limit."";
$resulta = mysql_query($querya) or die(mysql_error());
$num_rows2 = mysql_num_rows($resulta);
// quickly check if any mail returned query
if ($num_rows2 < 1){
mysql_close($connection);
echo "Nothing to mail... \n";
die();
}
while($rowa = mysql_fetch_array($resulta)){
$email[] = $rowa['email'];
$project_name = $rowa['project_name'];
$from_name = $rowa['from_name'];
$subject = $rowa['subject'];
$body = $rowa['body'];
$from = array($spun_from_email => $spun_from_name);
}
require_once 'swift/swift_required.php';
$transport = Swift_SmtpTransport::newInstance(''.$smtp.'', 25)
->setUsername($login)
->setPassword($pass)
;
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
// ->addPart('add part message', 'text/html')
// ->attach(Swift_Attachment::fromPath(''))
->setTo($email)
->setBody($body)
;
$mailout = $mailer->batchSend($message);
// ->addPart('add part message', 'text/html')
// ->attach(Swift_Attachment::fromPath(''))
;
$queryb = "DELETE FROM `mailer_lists` WHERE `project_name` = '".$project_name."' AND `email` = '".implode('\' OR `email` = \'',$email)."'";
$resultb = mysql_query($queryb) or die(mysql_error());
$c++;
echo "sent $num_rows1 emails to smtp $c \n";
}