Problème avec la newsletter
Le BBcode s'affiche dans les envois emails
Support des Modules
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Le 30/12, j'avais posté un message un peu similaire, mais il ne devait pas être dans le bon forum. Depuis, j'ai observé d'autres souci avec lae module de newsletter : disons des soucis chez moi. Peut-être n'en est-il pas de même ailleurs.
Voilà, lorsque je compose ma NL, à la prévisualisation, je n'ai pas de souci particulier. Mais, si je fais le test d'envoi, je reçois une NL qui contient des balises BBcode et des appostrophes comme ceux-ci "'". Inutile de vous dire qu'une NL qui contient des trucs du genre "[table][row][col][b][i], etc", ou des mots comme "l'emploi, l'eherbe, l''accident...,, ça n'est franchement pas terrible.
Dequoi cela peut-il venir ?
- Est-ce un pb de fonction mail de php ? Au quel cas, dois-je me retourner vers mon hébergeur ?
- Faut-il absolument faire sa NL en HTML ou en texte brut ? Mais en texte brut, adieu les images non ?
Suis-je le seul dans ce cas ?
Sinon, j'avais aussi précisé dans mon poste du 30/12 que j'avais un millier d'abonnés à ma NL. Je m'interrogeais donc de savoir comment le module de newsletter gérait les envois.
Au plaisir de vous lire.
Bien cordialement.
Sébastien Chauveau : journaliste, producteur, réalisateur
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Dans tous les cas, je pense que ça vient de PHPBoost et pas de ton hébergeur.
Je précise que pour ce qui concerne les 1000 envois, il se pourrait que tu n'y parviennes pas puisque les mails sont envoyés un après l'autre et que chaque envoi prend un certain temps.
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Il faudra que je teste pour les 1000 envoi, car, en fait, je suis autorisé à envoyer 100 message par heure. Donc, tout dépend du temps que met pbst à envoyer, mais si l'on compte 1 s par message, ça fait 60 à l'heure, donc je ne risque pas d'être black listé. Après, il faudra sûrement quelques heures pour envoyer le tout, mais ça c'est habituel je dirais, c'était déjà comme ça avec mon dev interne. Et puis ce doit bien être comme ça pour tout le monde à en croire l'heure à laquelle je reçois parfois les NL.
A moins qu'il y ait une autre méthode. Ou peut-être faudra-t-il hy penser pour la prochaine MAJ de PBST.
Bien cordialement.
Sébastien Chauveau : journaliste, producteur, réalisateur
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
La limitation de l'hébergeur est en effet un problème, mais il va surtout y avoir un problème de temps maximal d'exécution de PHP. En effet, PHP propose un temps maximal d'exécution au bout duquel l'exécution s'arrête. Généralement, les hébergeurs le mettent à 30 secondes ou 1 minute. J'ai très peu d'espoir quant à la faisabilité de terminer les envois en 1 minute...
J'essaierai de regarder si on peut pas trouver une astuce permettant d'améliorer les performances de cette newsletter, mais je pense pas qu'il y ait une solution magique. D'ailleurs, il y a beaucoup d'entreprises qui soustraitent l'envoi de newsletter car c'est quelque chose qui demande une grosse infrastructure, et elles n'existeraient pas si c'était simple (enfin c'est simplement une réflexion personnelle).
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Aille aille aille !!! La NL, c'est pourtant super important pour un site, surtout pour un site de contenu... Mais bon, je vais essayer tout de même de faire un envoi, et te tiendrais au courant.
Etonnant : sur mon ancien site, qui était un tout petit dev en interne, j'utilisais un script de NL que j'avais élaboré à partir du siteduzero (je le conseille à tous d'ailleurs, car le si peu de chose que je connais en PHP vient de chez eux, et ça m'est bien utile aujourd'hui). Je l'avais fait amélioré par un collègue, de sorte à ce que le script exécute des envois par paquet de 100. Ceci était paramétrable simplement en changeant la variable dans le script. Le script utilisait par contre une tâche cron. Si tu veux t'en inspirer, pour améliorer celui de pbst et en faire profiter la communauté, pourquoi pas, je peux t'envoyer le script original de mon ancienne NL. Avec ça, j'envoyais sans difficulté mes 1000 lettres. Je pense même que j'aurais pu aller jusqu'à 2000 sans pb.
Si tu me le permets, pendant que nous sommes dans les améliorations, je constate que l'on peut s'abonner à la NL. Mais que l'on ne peux pas s'en désabonner. A moins que je ne me trompe. Serait-il possible pour les MAJ à venir de penser à ce que les gens puissent se désinscrire de la NL. Mais puissent s'en désinscrire seul, car, effectivement, il est toujours possible de désinscrire quelqu'un en le faisant nous-mêmes, administrateur, si un inscrit nous le demande par email.
Enfin, un dernier point, est-ce que le script zappe les adresses emails qui ne sont plus valides. De sorte à alléger les envois qui ne servent à rien. En effet, il est fréquent que les gens s'inscrivent avec une adresse, en changent, et oublient de mettre à jour leurs abonnements NL.
Attention, il ne s'agit pour moi que de remarques, pas de critiques. D'autant que je suis bien incapable de coder comme vous. Je suis plutôt même nulle dans le genre. C'est juste l'avis d'un utilisateur. Donc je parle, enfin, j'écris, mais je ne suis pas forcément sûr que tout ce que je dis soit faisable. Je ne relâte que mes expériences.
Au plaisir.
Bien cordialement.
Sébastien Chauveau : journaliste, producteur, réalisateur
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Par contre pour la tache cron, c'est pas géré par tout les serveurs.
Mais je pense pouvoir trouver un bon compromis pour pouvoir faire ça.
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Mais c'est en effet une solution qui fonctionne bien. On verra si dans la prochaine version on peut intégrer un mode de ce genre.
Pour ce qui concerne tes retours, ne t'en fais pas, on ne les prend pas mal, je suis bien conscient que beaucoup de modules et en particulier newsletter sont limités. Toutes les critiques, qu'elles soient bonnes ou mauvaises, sont bonnes à prendre.
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Il est vrai que c'est quand même bien d'éviter les manipulations côté serveur. C'est la force de gros CMS comme PHPboost ou Joomla, où il n'y a rien à faire, où tout se fait du panneau d'administration. Car, d'autres CMS, bien plus petits, obligent non seulement à aller manipuler côté serveur, mais en plus à aller mettre les mains dans le code en permanence ce qui, à mon avis, n'est pas du rôle des utilisateurs mais des codeurs. C'est le cas de phpannonces par exempple.
Donc, prenez votre temps les amis. Mieux vaut mettre quelques semaines de plus et sortir un truc top que de vouloir aller trop vite et pondre un truc qui n'est pas fini et qui bug en permanence. Ca sent le vécu ça, je vous le dit...
Je suis déjà pressé de voir la 3.1.
Je le redit : je ne sais pas coder, en revanche, je sais écrire, même si parfois sur les forums j'écris à l'arrache. Etant journaliste/rédacteur, je peux en effet donner un coup de main à la rédaction des notices d'explications.
Bien cordialement.
Sébastien Chauveau : journaliste, producteur, réalisateur
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Peux-tu préciser ?
D'avance, merci.
Sébastien Chauveau : journaliste, producteur, réalisateur
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Désolé.
Bien cordialement.
Sébastien Chauveau : journaliste, producteur, réalisateur
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
db ; lang ; templates ; admin_newsletter.php ; admin_newsletter_config.php ; index.php ; newsletter.php ; newsletter.png ; newsletter_arch.php ; newsletter_begin.php ; newsletter_interface.class.php ; newsletter_mini.php ; newsletter_mini.png ; newsletter_service.class.php
Sébastien Chauveau : journaliste, producteur, réalisateur
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
sch Membre non connecté
Booster Fusée
-
Booster Fusée
- Voir le profil du membre sch
- Inscrit le : 28/09/2010
- Site internet
- Groupes :
Code php
<?php
/*##################################################
* newsletter_service.class.php
* -------------------
* begin : July 07, 2007
* copyright : (C) 2007 Sautel Benoit
* email : ben.popeye@phpboost.com
*
*
###################################################
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
###################################################*/
if (defined('PHPBOOST') !== true) exit;
import('content/parser/content_second_parser');
import('io/mail');
class NewsletterService
{
function send_html($mail_object, $message, $email_test = '')
{
global $_NEWSLETTER_CONFIG, $LANG, $Sql;
$error_mailing_list = array();
$message = stripslashes($message);
$message = str_replace('"../', '"' . HOST . DIR . '/' , $message);
$message = NewsletterService::clean_html($message);
$message = ContentSecondParser::export_html_text($message);
if ($email_test == '') // envoi définitif
{
$nbr = $Sql->count_table('newsletter', __LINE__, __FILE__);
//On enregistre dans les archives la newsletter envoyée
$Sql->query_inject("INSERT INTO " . PREFIX . "newsletter_arch (title,message,timestamp,type,nbr) VALUES('" . $mail_object . "','" . addslashes($message) . "', '" . time() . "', 'html', '" . $nbr . "')", __LINE__, __FILE__);
$mailing_list = array();
$result = $Sql->query_while("SELECT id, mail
FROM " . PREFIX . "newsletter
ORDER BY id", __LINE__, __FILE__);
while ($row = $Sql->fetch_assoc($result))
{
$mailing_list[] = array($row['id'], $row['mail']);
}
$Sql->query_close($result);
$mail_sender = new Mail();
$mail_sender->set_sender($_NEWSLETTER_CONFIG['sender_mail']);
$mail_sender->set_mime(MIME_FORMAT_HTML);
$mail_sender->set_object($mail_object);
foreach ($mailing_list as $array_mail)
{
$mail_sender->set_recipients($array_mail[1]);
$mail_sender->set_content(str_replace('[UNSUBSCRIBE_LINK]', '
[url=' . HOST . DIR . '/newsletter/newsletter.php?id=' . $array_mail[0] . ']' . $LANG['newsletter_unscubscribe_text'] . '[/url]
', $message));
if (!$mail_sender->send())
{
$error_mailing_list[] = $array_mail[1];
}
}
return $error_mailing_list;
}
else
{
$mail_sender = new Mail();
$mail_sender->set_sender($_NEWSLETTER_CONFIG['sender_mail']);
$mail_sender->set_mime(MIME_FORMAT_HTML);
$mail_sender->set_recipients($email_test);
$mail_sender->set_content($message);
$mail_sender->set_object($mail_object);
$mail_sender->send();
return true;
}
}
function send_bbcode($mail_object, $message, $email_test = '')
{
global $_NEWSLETTER_CONFIG, $LANG, $Sql;
$error_mailing_list = array();
$message = stripslashes(strparse(addslashes($message)));
$message = ContentSecondParser::export_html_text($message);
$mail_contents = '<html>
<head><title>' . $mail_object . '</title></head><body>';
$mail_contents .= $message;
if ($email_test == '') // envoi définitif
{
$nbr = $Sql->count_table('newsletter', __LINE__, __FILE__);
//On enregistre dans les archives la newsletter envoyée
$Sql->query_inject("INSERT INTO " . PREFIX . "newsletter_arch (title,message,timestamp,type,nbr) VALUES('" . $mail_object . "', '" . addslashes($message) . "', '" . time() . "', 'bbcode', '" . $nbr . "')", __LINE__, __FILE__);
$mailing_list = array();
$result = $Sql->query_while("SELECT id, mail
FROM " . PREFIX . "newsletter
ORDER BY id", __LINE__, __FILE__);
while ($row = $Sql->fetch_assoc($result))
{
$mailing_list[] = array($row['id'], $row['mail']);
}
$Sql->query_close($result);
$mail_sender = new Mail();
$mail_sender->set_sender($_NEWSLETTER_CONFIG['sender_mail']);
$mail_sender->set_mime(MIME_FORMAT_HTML);
$mail_sender->set_object($mail_object);
foreach ($mailing_list as $array_mail)
{
$mail_sender->set_recipients($array_mail[1]);
$mail_contents_end = '
[url=' . HOST . DIR . '/newsletter/newsletter.php?id=' . $array_mail[0] . ']' . $LANG['newsletter_unscubscribe_text'] . '[/url]</body></html>';
$mail_sender->set_content($mail_contents . $mail_contents_end);
if (!$mail_sender->send())
{
$error_mailing_list[] = $array_mail[1];
}
}
return $error_mailing_list;
}
else
{
$mail_sender = new Mail();
$mail_sender->set_sender($_NEWSLETTER_CONFIG['sender_mail']);
$mail_sender->set_mime(MIME_FORMAT_HTML);
$mail_sender->set_recipients($email_test);
$mail_sender->set_content($mail_contents . '</body></html>');
$mail_sender->set_object($mail_object);
$mail_sender->send();
return true;
}
}
function send_text($mail_object, $message, $email_test = '')
{
global $_NEWSLETTER_CONFIG, $LANG, $Sql;
$error_mailing_list = array();
$header = 'From: ' . $_NEWSLETTER_CONFIG['newsletter_name'] . ' <' . $_NEWSLETTER_CONFIG['sender_mail'] . '>' . "rn";
$header .= 'Reply-To: ' . $_NEWSLETTER_CONFIG['sender_mail'] . "rn";
if ($email_test == '') // envoi définitif
{
$nbr = $Sql->count_table('newsletter', __LINE__, __FILE__);
//On enregistre dans les archives la newsletter envoyée
$Sql->query_inject("INSERT INTO " . PREFIX . "newsletter_arch (title,message,timestamp,type,nbr) VALUES('" . strprotect($mail_object, HTML_NO_PROTECT, ADDSLASHES_FORCE) . "', '" . strprotect($message, HTML_NO_PROTECT, ADDSLASHES_FORCE) . "', '" . time() . "', 'text', '" . $nbr . "')", __LINE__, __FILE__);
$mailing_list = array();
$result = $Sql->query_while("SELECT id, mail
FROM " . PREFIX . "newsletter
ORDER BY id", __LINE__, __FILE__);
while ($row = $Sql->fetch_assoc($result))
{
$mailing_list[] = array($row['id'], $row['mail']);
}
$Sql->query_close($result);
$mail_sender = new Mail();
$mail_sender->set_sender($_NEWSLETTER_CONFIG['sender_mail']);
$mail_sender->set_mime(MIME_FORMAT_TEXT);
$mail_sender->set_object($mail_object);
foreach ($mailing_list as $array_mail)
{
$mail_sender->set_recipients($array_mail[1]);
$mail_sender->set_content($message . "nn" . $LANG['newsletter_unscubscribe_text'] . HOST . DIR . '/newsletter/newsletter.php?id=' . $array_mail[0]);
if (!$mail_sender->send())
{
$error_mailing_list[] = $array_mail[1];
}
}
return $error_mailing_list;
}
else
{
$mail_sender = new Mail();
$mail_sender->set_sender($_NEWSLETTER_CONFIG['sender_mail']);
$mail_sender->set_mime(MIME_FORMAT_HTML);
$mail_sender->set_recipients($email_test);
$mail_sender->set_content($message);
$mail_sender->set_object($mail_object);
$mail_sender->send();
return true;
}
}
//Fonction qui remplace les caractères spéciaux par leurs entités en conservant les balises html
function clean_html($text)
{
$text = htmlentities($text, ENT_NOQUOTES);
$text = str_replace(array('&', '<', '>'), array('&', '<', '>'), $text);
return $text;
}
}
?>
Sébastien Chauveau : journaliste, producteur, réalisateur
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie