Envoi en masse de courrier à l'aide de phpmailer
Je suis nouveau sur Phpmailer et je l'utilise pour envoyer un Email en vrac à plus d'un millier de personnes à partir d'un noreply compte. Le code fonctionne très bien quand j'ai envoyer le Mail à une ou deux personnes, mais quand je l'envoie à tout le monde (y compris moi-même), il va à spam. Un autre problème est dans les détails de l'e-Mail, il montre l'e-Mail de l'id de toutes les personnes à qui il a été envoyé que je ne veux pas qu'il fasse.
Le code est comme suit:
//date_default_timezone_set('America/Toronto');
require_once('../class.phpmailer.php');
//include("class.smtp.php"); //optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$mail->IsSMTP(); //telling the class to use SMTP
$mail->Host = "smtp1.site.com;smtp2.site.com";
$mail->SMTPAuth = true;//enable SMTP authentication
$mail->SMTPKeepAlive = true;//SMTP connection will not close after each email sent
$mail->Host = "mail.yourdomain.com"; //sets the SMTP server
$mail->Port = 26; //set the SMTP port for the server
$mail->Username = "yourname@yourdomain"; //SMTP account username
$mail->Password = "yourpassword"; //SMTP account password
$mail->SetFrom('[email protected]', 'List manager');
$mail->AddReplyTo('[email protected]', 'List manager');
$mail->Subject = 'Newsletter';
$ids = mysql_query($select, $connection) or die(mysql_error());
while ($row = mysql_fetch_row($ids)) {
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML($body);
$mail->AddAddress($row[0]);
$mail->Send();//Sends the email
}
OriginalL'auteur user992654 | 2011-10-13
Vous devez vous connecter pour publier un commentaire.
Comme JoLoCo points, le
AddAddress()
méthode AJOUTE simplement une nouvelle adresse pour le destinataire de la liste. Et puisque vous êtes en train de faire comme un ajout/envoyer boucle, vous êtes l'envoi d'un bon nombre de copies à la première personne, un de moins pour la seconde, etc...Ce que vous avez besoin est:
D'autre part, depuis cette spams de votre serveur de messagerie avec beaucoup de simples e-mails, une autre option est de générer un SEUL e-mail, CCI et tous les destinataires.
Cette option est probablement préférable. Vous ne générer qu'un seul e-mail, et de laisser le serveur de messagerie gérer le lourd travail de l'envoi de copies pour chaque destinataire.
Vous aurez à faire d'autres choses, telles que la mise en œuvre de Domaine Touches et des enregistrements SPF, et peut-être faire avancer votre envoi pour plus "légitimes" plate-forme d'envoi à atténuer le problème du spam. mais sinon, il suffit de commutation à l'aide De: au lieu de cela, avec la connaissance que PHP aura pour générer un courrier électronique pour chaque destinataire.
merci pour nice script, j'ai eu l'idée vides adresse de courriel par $mail->ClearAllRecipients()
OriginalL'auteur Marc B
Je pense que vous êtes en train d'ajouter la nouvelle adresse e-mail déjà envoyé -- donc, la première courriel sera acheminé à une personne, le second e-mail envoyé ira à la même personne, plus un autre, le troisième va aller à la ces deux, plus un de plus, et ainsi de suite.
Aussi, je ne pense pas que vous devez définir la AltBody et MsgHTML à chaque fois.
Vous devez ajouter toutes les adresses dans le champ CCI d'abord, puis de l'envoyer.
Alors essayez...
AddAddress
) puis à l'aide deAddBCC
pour les membres de la liste' des e-mails. J'ai édité mon code pour tenir compte de cela. Merci Marc!Non seulement vous n'avez pas besoin de définir de MsgHTML à chaque fois, il pourrait avoir des effets négatifs si le texte est inséré dans chaque mail différentes
OriginalL'auteur JoLoCo
Utiliser le champ CCI (Copie Carbone invisible) pour masquer la liste des destinataires.
Lié au problème du spam, cela dépend du fournisseur de messagerie des destinataires de ce qui se passe à du spam et ce qui ne l'est pas, et il ya de nombreux facteurs.
OriginalL'auteur Tamás Pap