web-dev-qa-db-fra.com

Comment envoyer en masse des emails

Je devrais envoyer des milliers d'e-mails en réaction à un événement spécifique. L'envoi d'e-mail n'est donc pas manuel, mais automatique.

Le serveur sur lequel mon site Web est hébergé a une limite horaire d'envoi d'e-mails (environ 500 par heure), donc je dois le partitionner.

Y at-il un plugin qui a cette fonctionnalité? Ou une bibliothèque PHP qui m'aide à le faire?

Merci

2
pAkY88

Je ne pense pas que l'utilisation de sleep() soit une bonne idée, car cela prend des ressources pendant la veille, et vous pourriez rencontrer des problèmes de temporisation de script.

Je ne pense pas non plus que ce soit une bonne idée d'envoyer des courriels importants ou en masse à partir d'un serveur Web, car ce n'est pas vraiment ce pour quoi il est conçu. Les messages envoyés à partir des fonctions mail() / wp_mail() standard risquent davantage d'être signalés comme courrier indésirable que ceux envoyés par de véritables MTA; Vous ne recevez aucun avis lorsque les messages sont renvoyés; L'hôte peut supprimer les messages parce que vous dépassez une limite arbitraire ou parce qu'il pense que vous spammer, et il y a de bonnes chances qu'il ne vous prévienne même pas qu'ils le font; etc...

Je pense que la meilleure façon de le faire serait d'utiliser un service conçu pour envoyer des courriers électroniques en masse, comme MailChimp. Ce sera beaucoup plus fiable et efficace. Vous pouvez utiliser des plugins tels que Importer des utilisateurs vers MailChimp pour synchroniser vos comptes d'utilisateurs WP avec les membres de la campagne. Il existe également des plugins tels que MailChimp STS pour relayer les messages générés par WP via MailChimp. Vous devrez peut-être effectuer une recherche dans le référentiel de plug-in pour trouver exactement ce dont vous avez besoin, mais de nombreux plug-ins liés à MailChimp sont disponibles.

Si vous insistez pour envoyer les messages depuis votre serveur Web, vous devez au moins utiliser une bibliothèque telle que SwiftMailer au lieu de wp_mail(). Il fait tout son possible pour réduire le risque que le message soit identifié à tort comme courrier indésirable et dispose d'un système d'envoi de lot avancé.

2
Ian Dunn

Vous aurez besoin de quelque chose comme le code suivant (peut-être un exemple de travail) utilisant get_users(); :

$users = get_users( /* Add your args here */ );
foreach ( $users as $user )
{
    $user_email_addresses[] = $user->email; // receive array of user mail addresses here
}

function wpse28212_send_delayed_bulkmail( $email_addresses )
{
    $i = 0;
    foreach ( $user_email_addresses as $email_addy )
    {
        ++$i; // count users up

        $delay = 0; // in miliseconds (ms)

        if ( $i >= 500 )
        {
            $delay = 3600000; // 1 hour
        }
        sleep( $delay );

        wp_mail( $email_addy, 'subject', 'message' );
    }
}

Liens:

1
kaiser