Wir haben eine wachsende Mailingliste, an die wir unseren Newsletter senden möchten. Im Moment senden wir ungefähr 1200 pro Tag, aber das wird sich ziemlich erhöhen. Ich habe ein PHP-Skript geschrieben, das jede halbe Stunde läuft, um E-Mails aus einer Warteschlange zu senden. Das Problem ist, dass es sehr langsam ist (zum Beispiel, um 106 E-Mails zu senden dauerte insgesamt 74,37 Sekunden). Ich musste die maximale Ausführungszeit auf 90 Sekunden erhöhen, um dem entgegenzukommen, da es sich zuvor ständig abgeschaltet hatte. Ich habe überprüft, dass die Abfragen nicht fehlerhaft sind und es scheint speziell der sendende Mail-Teil zu sein, der so lange dauert.Senden von Massen-E-Mails SLOW mit PHP PEAR Mail und ALT-N Mdaemon pro
Wie Sie unten sehen können, verwende ich Mail :: factory ('mail', $ params) und der E-Mail-Server ist ALT-N Mdaemon pro für Windows gehostet auf einem anderen Server. Während ich Tests durchführte, stellte ich fest, dass niemand an Hotmail- oder Yahoo-Adressen geliefert wurde und nicht einmal als Müll aufgenommen wurde.
Hat jemand eine Idee, warum das passieren könnte?
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 <[email protected]>",
"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();
}
Dies löst Ihr Problem nicht, aber ich würde erwägen, eine Mailingliste Firma zu mieten, um Ihre E-Mails zu verwalten. Sobald Sie selbst Massenmails verschicken, sind Sie verpflichtet, Fehler zu machen. Im besten Fall erhalten Ihre Nutzer einen schlechten Service, schlimmstenfalls wird Ihre IP von den Mail-Anbietern auf die schwarze Liste gesetzt. – Stephen
Um noch einmal zu betonen, ein Unternehmen, das auf Massenversand spezialisiert ist, wird weitaus effizienter und effektiver sein als eine selbst gezüchtete Lösung. Dadurch haben Sie mehr Zeit für die Arbeit an Ihrem Kernprodukt oder Ihren Kernprodukten. – Stephen
Könnte eine Option sein. Da wir bereits ein System zum Verwalten und Einreihen von E-Mails haben, würden wir nur versuchen, E-Mails extern zu versenden. Jeder Service, den Sie empfehlen würden? Ich habe Send blaster gesehen, aber es scheint ein Ersatz für das System zu sein, das wir bereits haben. – Greg