Nous avons une liste de diffusion en pleine expansion à laquelle nous voulons envoyer notre newsletter. En ce moment nous envoyons environ 1200 par jour, mais cela va augmenter un peu. J'ai écrit un script PHP qui s'exécute toutes les demi-heures pour envoyer des emails depuis une file d'attente. Le problème est qu'il est très lent (par exemple pour envoyer 106 emails a pris un total de 74,37 secondes). J'ai dû augmenter le temps d'exécution maximum à 90 secondes pour accommoder cela car il arrivait constamment avant. J'ai vérifié que les requêtes ne sont pas en faute et il semble que ce soit spécifiquement la partie de l'envoi de courrier qui prend tant de temps.Envoi en masse d'e-mails SLOW avec PHP PEAR Mail et ALT-N Mdaemon pro
Comme vous pouvez le voir ci-dessous, j'utilise Mail :: factory ('mail', $ params) et le serveur de messagerie est ALT-N Mdaemon pro pour Windows hébergé sur un autre serveur. En outre, tout en faisant des tests, j'ai constaté qu'aucun d'entre eux n'étaient livrés à des adresses hotmail ou yahoo, même pas considérés comme indésirables.
Est-ce que quelqu'un a une idée de pourquoi cela pourrait se produire?
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();
}
Cela ne résoudra pas votre problème, mais je considérerais l'embauche d'une société de liste de diffusion pour gérer vos emails. Une fois que vous commencez à envoyer des messages de masse vous-même, vous êtes obligé de faire des erreurs. Dans le meilleur des cas, vos utilisateurs obtiennent un mauvais service, dans le pire des cas, votre adresse IP est mise sur liste noire par les fournisseurs de messagerie. – Stephen
Pour réitérer, une entreprise qui se spécialise dans le publipostage sera beaucoup plus efficace et efficace qu'une solution maison. Cela vous libèrera du temps pour travailler sur votre produit ou vos actifs de base. – Stephen
Peut être une option. Comme nous avons déjà un système pour gérer et mettre en file d'attente des courriels, nous chercherions simplement à envoyer des courriels à l'externe. Tout service que vous recommanderiez? J'ai jeté un coup d'oeil à envoyer blaster mais il semble être un remplacement pour le système que nous avons déjà. – Greg