SwiftMailer库执行缓慢
|
我正在尝试在此邮件系统中实现swiftmailer。我的客户大约需要定期发送30万封活动电子邮件。系统最初配置为sendmail和php \的mail()函数。此后,我已经安装了最新版本的postfix。
可能是我的期望过高,但是我给我的印象是,这东西可以将很多电子邮件放入FAST队列中,而这正是我所需要的。所有的速率处理和节流都是在postfix端完成的,因此能够像我的postfix设置一样快地对其进行排队会很棒。
虽然我可以实现将联系人直接插入队列的方法,但我宁愿根据各种选项(例如smtp服务器的全局发送速率)来限制进入队列的电子邮件输入。
下面的代码只是一些基本测试。它遍历30个单独的邮件smtp帐户,每个帐户都有其自己的费率属性。我正在尝试将每个cron的最大电子邮件数量拉出数据库,然后使用
batchsend()
发送所有电子邮件,然后循环到下一个smtp帐户,发送最大数量,依此类推。
从技术上讲它确实起作用,但是它确实很慢。以每个smtp帐户60 / min的速率,每个过程大约需要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\";
}
没有找到相关结果
已邀请:
1 个回复
泪琉踞檄
延迟与smtp服务器的连接。您不需要每次都想发送电子邮件时就进行连接。在顶部连接一次,并检查连接是否有效(否则重新连接),发送电子邮件并清除字段
,
等。 从顶部的数据库中获取您的smtp设置,然后删除巨型ѭ5。那根本无法使代码可读