Je suis en train d'écrire un blog de musique. L'administrateur publie un nouvel article tous les 2-3 jours. Dès que l'administrateur publie un article, un courrier électronique en masse sera immédiatement envoyé à environ 5 000 abonnés.
Quel est le meilleur moyen d'implémenter la fonctionnalité de courrier de masse?
La fonction suivante fonctionne-t-elle?
function massmail()
{
$content = '...';
foreach ($recipients as $r) {
$_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
mail($r, 'subject', $_content);
}
}
Autre question: si les 5 000 abonnés utilisent Yahoo Mail, Yahoo le traitera-t-il comme une attaque DDOS et bloquera-t-il l'adresse IP de mon serveur SMTP?
Tout d’abord, utiliser la fonction mail () fournie avec PHP n’est pas une solution optimale. Il est facilement marqué comme spammé et vous devez configurer un en-tête pour vous assurer que vous envoyez correctement les emails HTML. Pour ce qui est de savoir si l'extrait de code fonctionnera, cela fonctionnerait, mais je doute que le code HTML soit correctement inséré sans en spécifiant des en-têtes supplémentaires
Je vous suggère de consulter SwiftMailer , qui prend en charge HTML, prend en charge différents types de mime et l'authentification SMTP (qui est moins susceptible de marquer votre courrier en tant que spam).
Je voudrais insérer tous les courriels dans une base de données (un peu comme une file d’attente), puis les traiter un par un comme vous l’avez fait dans votre code (si vous voulez utiliser swiftmailer ou phpmailer, vous pouvez le faire aussi.)
Après chaque mail envoyé, mettez à jour la base de données pour enregistrer la date/heure d'envoi.
En les mettant d'abord dans la base de données, vous avez
Rappelez-vous comment automatiser les courriels non valides ou invalides pour qu'ils soient automatiquement supprimés de votre liste.
Si vous envoyez autant de courriels, vous êtes tenu d'obtenir quelques rebonds.
Ceci est un conseil, pas une réponse: vous utilisez beaucoup mieux un logiciel de liste de diffusion dédié. mailman est un exemple souvent utilisé, mais quelque chose d'aussi simple que mlmmj peut suffire. Envoi de courrier en masse est en réalité une tâche plus difficile qu'il n'y parait. Non seulement vous devez envoyer les mails, vous devez également garder une trace des adresses "mortes" pour éviter que vos mails, ou pire, votre serveur de messagerie, soient marqués comme spam . Vous devez gérer des personnes qui se désabonner pour la même chose raison.
Vous pouvez implémenter ces choses vous-même, mais la gestion des rebonds est un travail difficile et peu gratifiant. L'utilisation d'un gestionnaire de liste de diffusion facilitera grandement les choses.
Pour ce qui est de rendre votre courrier acceptable pour yahoo, c’est tout autre chose. Malgré tous ses défauts, ils semblent mettre beaucoup en stock dans SPF et DomainKey. Vous devrez probablement les implémenter, ce qui nécessitera la coopération de votre administrateur de serveur de messagerie.
Vous pouvez envisager d'utiliser CRON pour ce type d'opération. Envoyer du courrier en masse en une fois n’est certainement pas bon, il peut être détecté comme spam, ddos, crash de votre serveur, etc.
CRON pourrait donc être une excellente solution: envoyez 100 mails à la fois, puis attendez quelques minutes, puis 100 prochains, etc.
Non envoyer un courrier électronique à 5 000 personnes à l'aide des outils PHP standard. Vous serez banni par la plupart des FAI en quelques secondes et vous ne le saurez même jamais. Vous devez utiliser un logiciel de listes de diffusion ou un fournisseur de services Email .
Pourquoi n'utilisez-vous pas plutôt phplist ? Il s’appuie également sur PHP Mailer et est utilisé par de nombreux leaders du secteur. Je l'ai utilisé moi-même plusieurs fois pour envoyer des courriers en nombre à mes clients. La chose intéressante à propos de phplist est que vous pouvez limiter vos messages au niveau du domaine, plus un niveau de temps limite.
Nous avons également utilisé quelques systèmes de capture internes: nous avons poussé notre base d'utilisateurs vers la liste de distribution, puis une entrée cron a déclenché l'envoi d'un courrier donné chaque jour. Les possibilités sont infinies, c'est ce qui est génial avec l'open source!
Aussi les paquets de poire:
http://pear.php.net/package/Mail_Mimehttp://pear.php.net/package/Mailhttp: //pear.php net/package/Mail_Queue
sanglot.
PS: NE PAS utiliser mail () pour envoyer ces 5000 emails. En plus de ce que tout le monde a dit, cela est extrêmement inefficace puisque mail () crée un socket séparé par ensemble de messages, même sur le même MTA.
Jetez également un coup d'œil à la classe PHPmailer. PHPMailer
Vous pouvez utiliser swiftmailer pour cela. En utilisant le traitement par lots.
<?php
$message = Swift_Message::newInstance()
->setSubject('Let\'s get together today.')
->setFrom(array('[email protected]' => 'From Me'))
->setBody('Here is the message itself')
->addPart('<b>Test message being sent!!</b>', 'text/html');
$data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error());
while($row = mysql_fetch_assoc($data))
{
$message->addTo($row['email'], $row['first'] . ' ' . $row['last']);
}
$message->batchSend();
?>
Je l'ai déjà fait en utilisant Lotus Notus
et PHP
. Cette solution fonctionne si vous avez accès au serveur de messagerie ou si vous pouvez demander quelque chose à l'administrateur mail server
:
1) Créez un groupe dans le mail server
: "Département commercial".
2) Attribuez à la group
les comptes dont vous avez besoin pour faire partie du groupe.
3) Attribuez une adresse Internet au groupe: [email protected].
4) Créez votre script PHP en utilisant la fonction mail:
$ to = "[email protected]";
mail ($ to, $ subject, $ message, $ headers);
Cela a fonctionné pour moi et tous les comptes du groupe reçoivent le courrier .
Le meilleur des chances.