OVH Cloud OVH Cloud

Newsletter

3 réponses
Avatar
kalimbra
Bonjour,

je suis en train de me programmer une petite newsletter, mais je galère
un peu. Je n'ai pas de problème pour envoyer un truc statique, mais j'ai
un peu de mal à rédiger le code pour une NL doublement dynamique :
récupération des emails dans mysql et création de la NL à la volée avec
récupération d'articles dans mysql

j'essaye de coller le code d'affichage de la NL dans le body du mail,
mais peut être est ce que ce n'est pas la bonne solution . Faudrait il
mieux travailler avec un fichier attaché.

Je mets mon code ci dessous, mais il est faux (problème de guillemets à
résoudre.) Néanmoins si vous pouvez me dire si je dois arrêter les frais
de suite...

merci d'avance..

CODE ------------------
<?php
mysql_select_db($database_FondarchLocal, $FondarchLocal);
$query_GetListEmails = "SELECT * FROM TestEmails";
$GetListEmails = mysql_query($query_GetListEmails, $FondarchLocal) or
die(mysql_error());
$row_GetListEmails = mysql_fetch_assoc($GetListEmails);
$totalRows_GetListEmails = mysql_num_rows($GetListEmails);

mysql_select_db($database_FondarchLocal, $FondarchLocal);
$query_GetArticlesNL = "SELECT * FROM TestArticles WHERE PourNL = 'Y'";
$GetArticlesNL = mysql_query($query_GetArticlesNL, $FondarchLocal) or
die(mysql_error());
$row_GetArticlesNL = mysql_fetch_assoc($GetArticlesNL);
$totalRows_GetArticlesNL = mysql_num_rows($GetArticlesNL);

// Newsletter
require "../phpmailer/class.phpmailer.php";
require "../phpmailer/class.smtp.php";
$mail = new PHPmailer();
//$mail->IsSMTP();
$mail->IsSendMail();
$mail->IsHTML(true);
$mail->Host='127.0.0.1';
$mail->From='thierry@kalimbra.com';
$mail->FromName='fondarch.lu';
$mail->AddAddress('thierry@cropmark.lu');
$mail->SMTPDebug ='true';
$mail->Subject='TestMailer2-envoiHTML';
$mail->Body="<table width=500 border=0 cellspacing=0 cellpadding=2>
<tr>
<td bgcolor=#666600<font color=#FFFFFF size=6 face=\"Arial,
Helvetica, sans-serif\">Newsletter Fondarch </font></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><font color=\"#333333\" size=\"1\" face=\"Arial, Helvetica,
sans-serif\">Intro Statique .... </font></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><table width=\"500\" border=\"0\" cellspacing=\"2\"
cellpadding=\"2\">
<?php do { ?>
<tr>
<td><font size=\"2\" face=\"Arial, Helvetica,
sans-serif\">."<?php echo $row_GetArticlesNL['TitreArt']; ?>"</font></td>
</tr>
<tr>
<td><font size=\"1\" face=\"Arial, Helvetica,
sans-serif\"><?php echo $row_GetArticlesNL['Texte']; ?></font></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<?php } while ($row_GetArticlesNL =
mysql_fetch_assoc($GetArticlesNL)); ?>
</table> <font color=\"#333333\" size=\"1\" face=\"Arial,
Helvetica, sans-serif\">&nbsp;</font></td>
</tr>
<tr>
<td><font color=\"#333333\" size=\"1\" face=\"Arial, Helvetica,
sans-serif\">pour
vous d&eacute;sabonner de la newsletter : cliquez ici </font></td>
</tr>
<tr>
<td><font color=\"#333333\" size=\"1\" face=\"Arial, Helvetica,
sans-serif\">&nbsp;</font></td>
</tr>
</table>

</body>
</html>";
if(!$mail->Send()){ //Teste le return code de la fonction
echo $mail->ErrorInfo; //Affiche le message d'erreur
(ATTENTION:voir section 7)
}
else{
echo 'Mail envoye avec succes';
}
$mail->SmtpClose();
unset($mail);



// fin newsletter





?>

FIN CODE ------------------

3 réponses

Avatar
Olivier Miakinen

Je mets mon code ci dessous, mais il est faux (problème de guillemets à
résoudre.)


Il n'y a pas que des problèmes de guillemets... en plein milieu de la
chaîne censée représenter le corps du message, tu oublies que tu es déjà
dans un programme PHP, et tu réouvres une balise <?php ...> !!!

$mail->Body="<table widthP0 border=0 cellspacing=0 cellpadding=2>
etc. peut devenir :


$mail->Body = "<table widthP0 border=0 cellspacing=0 cellpadding=2>
<tr>
<td bgcolor='#666600'><font color='#FFFFFF' size='6' face='Arial,
Helvetica, sans-serif'>Newsletter Fondarch </font></td>
[...]
<td><table width='500' border='0' cellspacing='2' cellpadding='2'>
";

do {
$mail->Body .= "
<tr>
<td><font size='2' face='Arial, Helvetica,
sans-serif'>$row_GetArticlesNL[TitreArt]</font></td>
</tr>
<tr>
<td><font size='1' face='Arial, Helvetica,
sans-serif'>$row_GetArticlesNL[Texte]</font></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
";
while ($row_GetArticlesNL = mysql_fetch_assoc($GetArticlesNL));

$mail->Body .= "
</table> [etc.]
</body>
</html>
";


Cela dit, note qu'un message en HTML pur a 99,73 % de chances d'être du
spam (estimation à la louche), et que donc tu devrais envisager une
version en texte brut, quitte à envoyer les deux dans un MIME/multipart
(mais ce sera en deuxième semaine).


--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
kalimbra
[snip]

soc($GetArticlesNL));

$mail->Body .= "
</table> [etc.]
</body>
</html>
";


Cela dit, note qu'un message en HTML pur a 99,73 % de chances d'être du
spam (estimation à la louche), et que donc tu devrais envisager une
version en texte brut, quitte à envoyer les deux dans un MIME/multipart
(mais ce sera en deuxième semaine).



je me doutais d'un truc comme ça, mais j'arrivais pas à choisir s'il
fallait l'intégrer ou pas..merci

Pour le spam j'ai en effet le problème (le mail n'arrive pas sur
certaines emails). Pour le multipart faudrait il sauvegarder la page
HTML construite par le serveur et l'envoyer un fichier attaché ? ou
existe t'il une autre méthode ???

Avatar
Olivier Miakinen

Pour le spam j'ai en effet le problème (le mail n'arrive pas sur
certaines emails).


Normal. Tu peux aussi proposer aux utilisateurs, lorsqu'ils s'inscrivent
à ta liste de diffusion¹, de choisir s'ils veulent la version HTML ou la
version texte brut. Inutile de leur proposer le choix entre HTML seul ou
Multipart (la plupart d'entre eux n'y comprendront rien), mais tu peux
toi-même décider de l'un ou de l'autre s'ils ont choisi HTML, tout en
sachant que le Multipart passera mieux les filtres anti-spam.

Pour le multipart faudrait il sauvegarder la page
HTML construite par le serveur et l'envoyer un fichier attaché ? ou
existe t'il une autre méthode ???


Quelle que soit la façon dont tu procèdes pour construire le contenu du
message, celui-ci sera de toute façon envoyé en une seule fois. Alors tu
peux soit te renseigner sur le format MIME/Multipart et essayer de le
construire à la main, soit utiliser un outil qui le fasse tout seul. Il
est assez vraisemblable que ton outil PHPmailer() propose ça dans sa
boîte à outils (je ne fais que supposer, je ne le connais pas).

Bonne chance pour tes recherches, et n'hésite pas à aller voir sur
fr.comp.mail si tu as des questions plus spécifiques au format d'envoi
des courriels (donc indépendantes de PHP).

--
Olivier Miakinen
¹ Je suppose bien entendu que les utilisateurs s'inscrivent de leur
propre volonté à ta liste de nouvelles, et que tu ne les inscris
pas sans leur consentement.