使用PHP PEAR Mail和ALT-N Mdaemon pro缓慢发送大量电子邮件
我们有一个不断增长的邮件列表,我们想发送我们的通讯。目前我们每天发送大约1200份,但这将增加很多。我编写了一个PHP脚本,每半小时运行一次,以从队列发送电子邮件。问题是它非常慢,例如发送106封电子邮件总共花费了74.37秒。我不得不将最大执行时间增加到90秒,以适应这种情况,因为之前它一直在超时。我已经检查过了,这些查询并没有错,而且似乎是发送邮件这一部分花费了很长时间 正如您在下面看到的,我使用的是Mail::factory'Mail',$params,电子邮件服务器是ALT-N Mdaemon pro for Windows,托管在另一台服务器上。此外,在做测试时,我发现没有一个邮件被发送到hotmail或yahoo地址,甚至没有被当作垃圾邮件接收 有人知道为什么会这样吗使用PHP PEAR Mail和ALT-N Mdaemon pro缓慢发送大量电子邮件,php,email,pear,email-spam,mail-server,Php,Email,Pear,Email Spam,Mail Server,我们有一个不断增长的邮件列表,我们想发送我们的通讯。目前我们每天发送大约1200份,但这将增加很多。我编写了一个PHP脚本,每半小时运行一次,以从队列发送电子邮件。问题是它非常慢,例如发送106封电子邮件总共花费了74.37秒。我不得不将最大执行时间增加到90秒,以适应这种情况,因为之前它一直在超时。我已经检查过了,这些查询并没有错,而且似乎是发送邮件这一部分花费了很长时间 正如您在下面看到的,我使用的是Mail::factory'Mail',$params,电子邮件服务器是ALT-N Mdae
foreach($leads as $k=>$lead){
$t1->start();
$job_data = $jobObj->get(array('id'=>$lead['job_id']));
$email = $emailObj->get($job_data['email_id']);
$message = new Mail_mime();
//$html = file_get_contents("1032.html");
//$message->setTXTBody($text);
$recipient_name = $lead['fname'] . ' ' . $lead['lname'];
if ($debug){
$email_address = DEBUG_EXPORT_EMAIL;
} else {
$email_address = $lead['email'];
}
// Get from job
$to = "$recipient_name <$email_address>";
//echo $to . " $email_address ".$lead['email']."<br>";
$message->setHTMLBody($email['content']);
$options = array();
$options['head_encoding'] = 'quoted-printable';
$options['text_encoding'] = 'quoted-printable';
$options['html_encoding'] = 'base64';
$options['html_charset'] = 'utf-8';
$options['text_charset'] = 'utf-8';
$body = $message->get($options);
// Get from email table
$extraheaders = array(
"From" => "Sender <sender@domain.com>",
"Subject" => $email['subject']
);
$headers = $message->headers($extraheaders);
$params = array();
$params["host"] = "mail.domain.com";
$params["port"] = 25;
$params["auth"] = false;
$params["timeout"] = null;
$params["debug"] = true;
$smtp = Mail::factory('mail', $params);
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
$logObj->insert(array(
'type' => 'process_email',
'message' => 'PEAR Error: '.$mail->getMessage()
));
$failed++;
} else {
$successful++;
if (DEBUG) echo("<!-- Message successfully sent! -->");
// Delete from queue
$deleted = $queueObj->deleteById($lead['eq_id']);
if ($deleted){
// Add to history
$history_res = $ehObj->create(array(
'lead_id' => $lead['lead_id'],
'job_id' => $lead['job_id']
)
);
if (!$history_res){
$logObj->insert(array(
'type' => 'process_email',
'message' => 'Error: add to history failed'
));
}
} else {
$logObj->insert(array(
'type' => 'process_email',
'message' => 'Delete from queue failed'
));
}
}
$t1->stop();
}
很难说。您应该使用pintpoint来分析代码,以指出低垂的果实
我也认为你可以考虑使用一个消息队列来处理你的E-MayReIs/BeaStaldD/Goognand / KestRelo异步或者使用第三方依赖,比如谷歌App Engine,它非常便宜,每个接收者0.0001美元/每天1000个电子邮件。考虑到你的工作量,每天大约要花10美分。
很难说。您应该使用pintpoint来分析代码,以指出低垂的果实我也认为你可以考虑使用一个消息队列来处理你的E-MayReIs/BeaStaldD/Goognand / KestRelo异步或者使用第三方依赖,比如谷歌App Engine,它非常便宜,每个接收者0.0001美元/每天1000个电子邮件。考虑到你的负荷,每天大约要花10美分。
你面临着两个不同的问题一,。要发送大量电子邮件,您确实需要一个邮件队列和多个邮件服务器来从该队列中获取邮件并依次处理邮件您将面临两个不同的问题
一,。要发送大量电子邮件,你真的需要一个邮件队列和几个邮件服务器来从该队列获得邮件,然后处理邮件,这并不能解决你的问题,但是我会考虑雇佣一个邮件列表公司来管理你的电子邮件。一旦你自己开始发送大量邮件,你肯定会犯错误。最好的情况是你的用户得到的服务很差,最坏的情况是你的IP被邮件提供商列入黑名单。重申一下,一家专门从事群发邮件的公司将比一个本土解决方案更加高效。这将腾出你的时间来处理你的核心产品或资产。这可能是一个选择。由于我们已经有了一个管理和排队电子邮件的系统,我们只希望向外部发送电子邮件。您有什么建议吗?我看过send blaster,但它似乎是我们已经拥有的系统的替代品。我想到了。每月1千名订户和6千封电子邮件是免费的。他们制定了统一的定价计划,没有很好的定价限制。这并不能解决你的问题,但是我会考虑雇佣一个邮件列表公司来管理你的邮件。一旦你自己开始发送大量邮件,你肯定会犯错误。最好的情况是你的用户得到的服务很差,最坏的情况是你的IP被邮件提供商列入黑名单。重申一下,一家专门从事群发邮件的公司将比一个本土解决方案更加高效。这将腾出你的时间来处理你的核心产品或资产。这可能是一个选择。由于我们已经有了一个管理和排队电子邮件的系统,我们只希望向外部发送电子邮件。您有什么建议吗?我看过send blaster,但它似乎是我们已经拥有的系统的替代品。我想到了。每月1千名订户和6千封电子邮件是免费的。他们有固定费率计划,没有发送限制,价格也很好。你是指这样的吗。我已经使用了一个用PHP构建的自定义消息队列,队列本身看起来很好,它只是发送部分。这也正是我所指的。也许评测会给你更多的洞察力?你指的是这样的东西吗。我已经使用了一个用PHP构建的自定义消息队列,队列本身看起来很好,它只是发送部分。这也正是我所指的。也许分析能让你更深入一点?