Support et annonces PhpMyNewsLetter.
Vous n'êtes pas identifié(e).
Juste un peu de patience, je compile mes réponses ! 
Hello and welcome on this board.
I hope i'll be able to able to help despite my english...
So, you've got this error because you're on php 5.2, and phpmynewsletter requires at least php 5.3 as specified here :
https://www.phpmynewsletter.com/documen … #prerequis
The key word php 5.2 doesn't undersand is 'use' in the function :
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}Please, upgrade (the best is to go directly to php 5.6 if you can, and better php 7.1).
And enjoy !
Arnaud
Hein que c'est vrai ?!
Allez, faites un peu de pub pour le script, ça me fera plaisir 
Hello,
Oui l'option des urls, je valide, c'est acquis. Présentation et accès à définir.
1/ mail tester, c'est une société lyonnaise (WOOBEO), et c'est un outil qui a été monté par des personnes de MailPoet et AcyMailing qui avaient besoin d'une interface simple de restitution de la possible délivrabilité des mails. Le principe : on envoie un mail à une adresse, leur système reçoit le mail, fait une analyse spamassassin, et restitute le score (avec de belles présentations et explications).
donc une fois que tu as mis ton code, tu envoies ta preview, et tu cliques sur le lien affiché après l'envoi, ça t'emmnéra directement sur la page des résultats mail tester. Pas d'envoi par mail ou quoi que ce soit.
2/ smtp : c'est le smtp général défini pour toutes les listes. Effectivement, je n'ai pas prévu de réafficher les codes. Je corrigerai cela.
3/ monstrueux.. Oui !! 
4/ travaux toujours en cours, j'en ai pour des années, ma maison est quand même de 1875...

Bonjour,
Oui, fonctionnalité désactivée.
Il faut aller cliquer sur le bouton suivant dans la barre de composition d'un message :
Le bouton est définitivement supprimé dans la future version.
Bonne journée
Arnaud
et
QUE DU BONHEUR !
Tant mieux, j'adore lire tout ceci !
Alors, voilà mes remarques :
- le cron fonctionne chez O2SWITCH, excellent point pour les hébergés chez eux, ce n'est pas le cas de tous les hébergeurs de proposer cette possibilité (via crontab / shell j'entends).
- soft simple : tant mieux, c'est bien le but, mais franchement c'est complexe... La machinerie mailing est lourde, et ici je ne parle pas de tout ce qui est postfix, sendmail, dkim, spf, greylist, antispam et cie...
- le head a fait l'objet de soins spécifiques. S'approprier l'éditeur n'est pas une chose facile... Stress garanti !
Nota :
- ok pour les archives, je le mettrai pour 2.0.5, mais bon... Suis pas super fan (ou mettre un mode archives disponibles à valider par admin, switch on / off)
Bugs :
- en mode répertoire, normalement il n'y a pas à modifier les scripts.. Mais en l'état, laisse comme c'est.
Mes réponses :
- encoder le message, c'est pour le passer en base 64 : ça englobe les images (si on les passe en CID !), ça alourdit le mail, et ça permet surtout d'outrepasser certains outils de lecture (mode texte)... bref, c'est une option qui exsite, je n'ai rien trouvé sur l'impact spam, délivrabilité... Je n'ai même pas fait de tests mail-tester ! Ca existe, terminé. Je ne dirai rien de plus que de laisser cette option ! Si ton taux d'ouverture est correct, tu laisses.
- archives c'est vu
- laisse à 3 mails oui. Si tu estimes que c'est trop long, passe à 5 ! Mais bon, sincèrement, ne va pas plsu loin. Sois doux avec les BAL de tes correspondants ! Il faut les bichonner !!!
- absence d'éditeur : tu vas dans include/newsletterconf.php et tu cherche js/tinymce, c'est le même problème qu'avec compose.php. Bien vu !
- l'envoi multiple n'est plus possible, il y a une mise à jour de la table des emails avec le numéro de la campagne envoyée, donc plus de doublon.
Et si tu aimes effectivement ce produit, tu peux en parler partout où tu veux ! (facebook, sites d'entraide informatiques, tes connaissances qui veulent faire du mailing, etc...)
Merci pour le temps que tu as passé à rédiger et illustrer ton messgae, c'est SUPER

Bonjour,
Effectivement.
Pour ajouter les possibilités de centrage, tu vas aller adns le fichier include/compose.php, chercher l'expression toolbar3 :
toolbar3 : 'styleselect,formatselect,fontselect,fontsizeselect,',et remplacer par :
toolbar3 : 'styleselect,formatselect,fontselect,fontsizeselect,alignleft, aligncenter, alignright',frocer le rafraichissement du navigateur en cliquant simultanément CTRL + F5.
Voilà.
Bonjour,
Et oui forcément !
Je ne vais pas reprendre tous les scripts, mais je te donne la solution quand même, il faut aller dans /send.php (les envois en ajax) et /include/task.php (envois en tâches planifiées) et modifier les paramètres $row_config_globale['path'] que tu y trouveras.
En sous domaine, tu ne dois rien avoir, d'où l'importance de laisser à blanc dans la zone chemin de phpmynewsletter dans la configuration générale.
Bon courage !
Effectivement...
Bonjour !
Le plus simple, c'est quand même une installation en répertoire...
Pour ton cas, ce sera comme ça :
<?php
$subject = ( !empty($_POST['subject']) ) ? $_POST['subject'] : '';
$message = ( !empty($_POST['message']) ) ? $_POST['message'] : '';
$format = ( !empty($_POST['format']) ) ? $_POST['format'] : '';
$encode = ( !empty($_POST['encode']) ) ? 'base64' : '8bit';
switch($op){
case 'init':
$newsletter=getConfig($cnx,$list_id,$row_config_globale['table_listsconfig']);
$newsletter_autosave=getConfig($cnx,$list_id,$row_config_globale['table_sauvegarde']);
if (!empty($_POST['import_id'])) {
$import_id = $_POST['import_id'];
}
$reset = (!empty($_GET['reset'])&&$_GET['reset']=='true') ? 'true' : 'false';
$ft = (!empty($_GET['ft'])) ? $_GET['ft'] : '';
if(getSubscribersNumbers($cnx,$row_config_globale['table_email'],$list_id)){
if (isset($import_id) && is_numeric($import_id)) {
$row = $cnx->query("SELECT date, type, subject, message, list_id FROM "
. $row_config_globale['table_archives']." WHERE id='$import_id'")->fetch(PDO::FETCH_ASSOC);
$textarea = addslashes(@htmlspecialchars($row['message']));
$subject = addslashes(@htmlspecialchars($row['subject']));
$type = $row['type'];
$cnx->query("INSERT INTO "
. $row_config_globale['table_sauvegarde']."(list_id,subject,textarea,type) VALUES ('$list_id','$subject','$textarea','$type')");
} elseif(isset($newsletter_autosave['textarea'])&&trim($newsletter_autosave['textarea'])!=''&&$reset=='false') {
$textarea = $newsletter_autosave['textarea'];
$type = 'html';
$subject = @htmlspecialchars($newsletter_autosave['subject']);
} else {
$textarea = addslashes($newsletter['header']."\n\n\n".$newsletter['footer']);
$subject = @addslashes(htmlspecialchars($newsletter['subject']));
$type = 'html';
$cnx->query("INSERT INTO "
. $row_config_globale['table_sauvegarde']."(list_id,subject,textarea,type) VALUES ('$list_id','$subject','$textarea','$type')");
}
echo "<form id='mailform' name='mailform' method='post' action='' class='post_message'>";
echo "<div align='center'><h4 class='alert_info'>".tr("COMPOSE_AND_PREVIEW").".</h4></div>";
echo '<article class="module width_3_quarter">';
echo '<header><h3 class="tabs_involved">'.tr("COMPOSE_NEW").'</h3></header>';
echo tr("COMPOSE_SUBJECT")." : ".tr("RFC_2822")."<br><br>
<input type='text' name='subject' value=\"". stripslashes($subject)
. "\" size='50' maxlength='255' id='subject' /> <span id='chars'>78</span>
<br><br>".tr("COMPOSE_MSG_BODY")." :";
echo "<textarea name='message' id='redac' rows='20' cols='70'>". stripslashes($textarea) ."</textarea>";
echo "<div id='as'><h4 class='alert_info'>".tr("START_INITIALISATION")."...</h4></div><br> </article>";
echo '<article class="module width_quarter"><div class="sticky-scroll-box">';
echo '<header><h3>'.tr("ACTIONS").' :</h3></header><div align="center">';
echo "<input type='button' value='".tr("SAVE_THIS_MESSAGE")."' id='rec' type='button' class='button' />"
."<br><br><input type='button' value='".tr("COMPOSE_RESET")."' onClick=\"parent.location='".$_SERVER['PHP_SELF']
."?page=compose&token=$token&list_id=$list_id&reset=true'\" />"
."<br><br><input type='button' value='".tr("COMPOSE_PREVIEW")." >>' onclick='Soumettre()' disabled id='send_preview' />";
echo "<br><br><input type='checkbox' name='encode' value='base64'><b>".tr("COMPOSE_ENCODE")." ?</b>";
echo "</div>";
echo '<header></header>';
echo '<header><h3>'.tr("ATTACHMENTS").'</h3></header>';
echo "<div id='pjs'></div>";
echo "<div align='center'><a href='upload.php?token=$token&list_id=$list_id' class='iframe'>".tr("ADD_ONE_OR_MORE_ATTACHMENT")."</a></div>";
echo "</div></article>";
echo "<script>$(function(){function pjs(){ $.ajax({type:\"POST\", url:\"include/pjq.php\",
data:\"token=$token&list_id=$list_id\",success:function(data){ $('#pjs').html(data);}});setTimeout(pjs,10000);}pjs();});</script>";
echo "<input type='hidden' id='type' name='format' value='html' />
<input type='hidden' name='op' value='preview' />
<input type='hidden' name='action' value='compose' />
<input type='hidden' name='page' value='compose' />
<input type='hidden' id='list_id' name='list_id' value='$list_id' />
<input type='hidden' id='token' name='token' value='$token' />
</form>";
if($ft==""){
echo "<script src='js/tinymce/tinymce.min.js'></script>
<script>
tinymce.init({
selector : 'textarea#redac',
plugins : [
'fullscreen fullpage visualblocks, preview searchreplace print insertdatetime hr',
'charmap anchor code link image paste pagebreak table contextmenu',
'filemanager table code media autoresize textcolor emoticons'
],
/*toolbar1 : 'insertfile undo redo | bold italic | forecolor colorpicker backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent',
toolbar2 : 'styleselect | fontselect fontsizeselect | emoticons | link image | filemanager | template',*/
toolbar1 : 'newdocument,print,|,bold,italic,underline,|,strikethrough,superscript,subscript,|,forecolor,backcolor,|,bullist,numlist,outdent,indent,|,visualchars,visualblocks,|,charmap,|,hr,',
toolbar2 : 'table,|,cut,copy,paste,searchreplace,|,blockquote,|,undo,redo,|,link,unlink,anchor,|,image,emoticons,media,|,inserttime,|,preview,fullscreen,code,',
toolbar3 : 'styleselect,|,formatselect,|,fontselect,|,fontsizeselect,',
style_formats: [
{title: 'Open Sans', inline: 'span', styles: { 'font-family':'Open Sans'}},
{title: 'Arial', inline: 'span', styles: { 'font-family':'arial'}},
{title: 'Book Antiqua', inline: 'span', styles: { 'font-family':'book antiqua'}},
{title: 'Comic Sans MS', inline: 'span', styles: { 'font-family':'comic sans ms,sans-serif'}},
{title: 'Courier New', inline: 'span', styles: { 'font-family':'courier new,courier'}},
{title: 'Georgia', inline: 'span', styles: { 'font-family':'georgia,palatino'}},
{title: 'Helvetica', inline: 'span', styles: { 'font-family':'helvetica'}},
{title: 'Impact', inline: 'span', styles: { 'font-family':'impact,chicago'}},
{title: 'Symbol', inline: 'span', styles: { 'font-family':'symbol'}},
{title: 'Tahoma', inline: 'span', styles: { 'font-family':'tahoma'}},
{title: 'Terminal', inline: 'span', styles: { 'font-family':'terminal,monaco'}},
{title: 'Times New Roman', inline: 'span', styles: { 'font-family':'times new roman,times'}},
{title: 'Verdana', inline: 'span', styles: { 'font-family':'Verdana'}}
],
cleanup : true,
cleanup_on_startup : true,
convert_urls : true,
custom_undo_redo_levels : 20,
doctype : '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">',
entity_encoding : 'named',
external_filemanager_path:'plugins/filemanager/',
external_plugins: { 'filemanager' : 'plugins/filemanager/plugin.min.js'},
extended_valid_elements: 'pre[*],style[*]',
filemanager_title:'Responsive Filemanager' ,
fontsize_formats : '8px 9px 10px 11px 12px 13px 14px 18px 24px',
forced_root_block : false,
force_br_newlines : true,
force_p_newlines : false,
height : '350',
image_advtab: true ,
inline_styles : true,
language : '".tr("TINYMCE_LANGUAGE")."',
relative_urls: false,
remove_script_host : false,
theme: 'modern',
valid_children : '+body[style|section],pre[section|div|p|br|span|img|style|h1|h2|h3|h4|h5],+*[*]',
valid_elements : '+*[*]',
verify_html : false,
menu: {
edit: {title: 'Edit', items: 'undo redo | cut copy paste | selectall'},
insert: {title: 'Insert', items: 'media image link | pagebreak'},
view: {title: 'View', items: 'visualaid'},
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'},
tools: {title: 'Tools', items: 'code'}
}
});
var elem=$('#chars');
$('#subject').limiter(78,elem);
$(document).ready(function() { Si=setInterval(save,10000); });
function save(){
tinyMCE.triggerSave();
var ds=$('#mailform').serialize();
$.ajax({
type: 'POST',
url: 'autosave.php',
data: ds,
cache: false,
success: function(msg) {
$('#as').html(msg).show();
$('#send_preview').removeAttr('disabled');
},
error: function() {
$('#as').html('<h4 class=alert_error>".tr("UNSAVED_MESSAGE")." !</h4>').show();
}
});
}
$('#rec').click(function(){ save(); });
</script>";
} elseif($ft=='else') {
echo "<script>var elem=$('#chars');$('#subject').limiter(78,elem);
$(document).ready(function() { Si=setInterval(save,10000); });
function save(){";
echo ($ft=='else'?"":"tinyMCE.triggerSave();");
echo "
$('#as').html('".tr("SAVE_PROCESS")."...').show();
var ds=$('#mailform').serialize();
$.ajax({
type: 'POST',
url: 'autosave.php',
data: ds,
cache: false,
success: function(msg) {
$('#as').html(msg).show();
},
error: function() {
$('#as').html('<h4 class=alert_error>".tr("UNSAVED_MESSAGE")." !</h4>').show();
}
});
}
$('#rec').click(function(){ save(); });
</script>";
}
echo "<script>
function Soumettre(){
if ( (document.mailform.subject.value=='') || (document.mailform.message.value=='') )
alert('".tr("ERROR_ALL_FIELDS_REQUIRED")."');
else {
document.mailform.submit();
}
}
</script>";
} else {
echo "<h4 class='alert_error'>".tr("ERROR_UNABLE_TO_SEND")."</h4>";
}
break;
case "preview":
$up = @($_GET['up']=='false' ? false : true);
if($up){
$cnx->query("UPDATE ".$row_config_globale['table_sauvegarde']."
SET textarea = '".addslashes($message)."',
subject='".addslashes($subject)."',
type='$format'
WHERE list_id='$list_id'");
}
$newsletter = getConfig($cnx,$list_id,$row_config_globale['table_listsconfig']);
$msg = getConfig($cnx,$list_id,$row_config_globale['table_sauvegarde']);
$format = $msg['type'];
if(empty($message)){
$message = stripslashes($msg['textarea']);
}
if(empty($subject)){
$subject = stripslashes($msg['subject']);
}
$subj = htmlspecialchars($subject);
if($format == "html"){
$msg = $message;
} else {
$msg = htmlspecialchars($message);
}
echo "<form method='get' action='send_preview.php' id='mailform' name='mailform'>";
echo "<div align='center'><h4 class='alert_info'>".tr("STEP_SEND_PREVIEW", $newsletter['preview_addr']).".</h4></div>";
echo "<article class='module width_full'><div style='margin:3px;'>";
echo "Preview for : <a href='' onClick='xx(320);return false;'>iPhone 4/5 (320x480),</a> "
. "<a href='' onClick='xx(360);return false;'>Nexus 5 (360x598),</a> "
. "<a href='' onClick='xx(375);return false;'>iPhone 6 (375x667),</a> "
. "<a href='' onClick='xx(384);return false;'>Nexus 4 (384x598),</a> "
. "<a href='' onClick='xx(414);return false;'>iPhone 6 Plus (414x736),</a> "
. "<a href='' onClick='xx(600);return false;'>Nexus 7 2013 (600x960),</a> "
. "<a href='' onClick='xx(750);return false;'>iPhone 6S (750x1334),</a> "
. "<a href='' onClick='xx(768);return false;'>iPad 3 (768x1024),</a> "
. "<a href='' onClick='xx(800);return false;'>Nexus 10 (800x1280)</a> ";
echo "</div></article>";
echo '<article class="module width_3_quarter">';
echo '<header><h3 class="tabs_involved">'.tr("COMPOSE_PREVIEW_TITLE").' : ' . $subj . '</h3></header>';
echo "<iframe src='preview.php?list_id=$list_id&token=$token' width='100%' height='650px' style='border:0;' id='_preview'><p>".tr("ERROR_IFRAME")."...</p></iframe></div>";
echo "<input type='hidden' name='list_id' value='$list_id'>
<input type='hidden' name='encode' value='$encode'>
<input type='hidden' name='op' value='send_preview'>
<input type='hidden' id='token' name='token' value='$token'>";
echo "</article>";
echo '<article class="module width_quarter"><div class="sticky-scroll-box">';
echo '<header><h3>Actions :</h3></header><div align="center">';
echo "<input type='button' onClick=\"window.location.href='".$_SERVER['PHP_SELF']."?page=compose&token=$token&list_id=$list_id&op=init'\"
value=\"".tr("COMPOSE_BACK")."\" />";
echo "<br><br><input type='submit' value='".tr("COMPOSE_SEND")." (Mode PREVIEW)' />";
echo "</div>";
echo '<header></header>';
echo '<header><h3>'.tr("ATTACHMENTS").'</h3></header>';
echo "<div id='pjs'></div>";
echo "<div align='center'><a href='upload.php?token=$token&list_id=$list_id' class='iframe'>".tr("ADD_ONE_OR_MORE_ATTACHMENT")."</a></div>";
echo '</article>';
echo "</form>";
echo "<script>";
echo "$(function(){function pjs(){ $.ajax({type:\"POST\", url:\"include/pjq.php\", data:\"token=$token&list_id=$list_id\",success:function(data){ $('#pjs').html(data);}});setTimeout(pjs,10000);}pjs();});";
echo "</script>";
echo "<script>
function Soumettre(){
document.mailform.submit();
}
</script>";
break;
case "send_preview":
$newsletter = getConfig($cnx,$list_id,$row_config_globale['table_listsconfig']);
$msg = getConfig($cnx,$list_id,$row_config_globale['table_sauvegarde']);
$format = $msg['type'];
if(empty($message)){
$message = stripslashes($msg['textarea']);
}
if(empty($subject)){
$subject = stripslashes($msg['subject']);
}
$subj = htmlspecialchars($subject);
if($format == "html"){
$msg = $message;
} else {
$msg = htmlspecialchars($message);
}
$error = ( empty($_GET['error']) ? "" : $_GET['error'] );
$encode = ( !empty($_GET['encode']) && $_GET['encode'] == 'base64' ) ? 'base64' : '8bit';
echo '<div class="archmsg">';
if($error==""){
echo "<div align='center'><h4 class='alert_success'>".tr("PREVIEW_SEND_OK").".</h4>";
if(isset($code_mailtester) && $code_mailtester!='') {
echo "<h4 class='advt alert_success' align='center'><a href='https://www.mail-tester.com/" . $code_mailtester . "' target='_blank'>"
. tr("CHECK_SPAM_SCORE_MAIL_TESTER")."</a></h4>";
}
echo "<h4 class='advt alert_info' align='center'>".tr("PREVIEW_OK")." ?<br>"
. tr("CLICK_TO_SEND", tr("COMPOSE_SEND")).", ".tr("COMPOSE_ELSE_BACK")."</h4></div>";
} else {
echo "<div align='center'><h4 class='alert_error'>Attention ! Le message de preview est en erreur. Motif : "
. $error ." ! Merci de corriger, puis relancer le message de preview en cliquant ici : <a href='"
. $_SERVER['PHP_SELF']."?page=compose&op=init&list_id=$list_id&token=$token'>".tr("RE_SEND_PREVIEW")."</a></h4></div>";
}
echo '<article class="module width_3_quarter">';
echo '<header><h3 class="tabs_involved">'.tr("COMPOSE_PREVIEW_TITLE").' :</h3></header>';
echo "<iframe src='preview.php?list_id=$list_id&token=$token' width='100%' height='400px' style='border:0;'><p>"
. tr("ERROR_IFRAME")."...</p></iframe>";
echo "</article>";
echo '<article class="module width_quarter"><div class="sticky-scroll-box">';
echo '<header><h3>Actions :</h3></header><div align="center">';
echo "<br><br><input type='button' value='".tr("COMPOSE_BACK")."' onClick=\"parent.location='"
. $_SERVER['PHP_SELF']."?page=compose&token=$token&list_id=$list_id&op=preview&up=false&encode=$encode'\" />";
if($error==""){
echo "<br><br><input type='button' value='".tr("COMPOSE_SEND")."' class='button' id='SendIt'>";
} else {
echo "<h4 class='alert_error'>".tr("STOP_ON_PREVIEW_ERROR")." !</h4>";
}
if($type_serveur=='dedicated'&&$exec_available){
echo "<br><br><form method='post' action=''>
<input type='submit' value='".tr("SCHEDULE_THIS_SEND")."' />
<input type='hidden' name='NEWTASK' value='SCHEDULE_NEW_TASK' />
<input type='hidden' name='list_id' value='$list_id' />
<input type='hidden' name='encode' value='$encode'>
<input type='hidden' name='page' value='task' />";
}
echo '</div>';
echo "<script>$(function(){function pjs(){ $.ajax({type:\"POST\", url:\"include/pjq.php\", data:\"token="
. $token . "&list_id=" . $list_id . "\",success:function(data){ $('#pjs').html(data);}});setTimeout(pjs,10000);}pjs();});
</script>";
echo '<header></header>';
echo '<header><h3>'.tr("ATTACHMENTS").'</h3></header>';
echo "<div id='pjs'></div>";
echo "<div align='center'><a href='upload.php?token=$token&list_id=$list_id' class='iframe'>".tr("ADD_ONE_OR_MORE_ATTACHMENT")."</a></div>";
echo '</article></div>';
?>
<script type="text/javascript">
$("#SendIt").click(function(){
$('.advt').hide('slow');
$('.archmsg').hide('slow');
$('.button').hide('slow');
$('html,body').animate({scrollTop:'0px'},500);
$('#msg').show();
$('#smail').html("<?php echo tr("PROGRESSION_OF_CURRENT_SEND");?>");
$(function(){
var begin = 0;
var sn = 0;
var step = '';
var pct = 0;
var list_id = <?php echo (($list_id)+0);?>;
var token = '<?php echo $token;?>';
var msg_id = 0;
var tts = 0;
var encode = '<?php echo $encode;?>';
function progresspump(){
$.ajax({
url:"send.php",
type: "GET",
dataType:"json",
data:'list_id=' + list_id + '&token=' + token + '&begin=' + begin + '&sn=' + sn + '&step=' + step + '&msg_id=' + msg_id + '&encode=' + encode,
success:function(rj){
begin = rj.begin;
sn = rj.sn;
step = rj.step;
pct = (rj.pct!=''?rj.pct:0);
msg_id= rj.msg_id;
tts = (typeof rj.TTS!='undefined'?rj.TTS:0);
$("#pct").css('width',pct+'%');
$("#done").html(pct+'%');
$("#total_to_send").html(sn);
$("#ch_last").html(tts);
if(pct > 99.999) {
clearInterval(progresspump);
$("#send_title").text("<?php echo tr("SEND_ENDED");?>...");
$("#all_done").html("<?php echo tr("REDIRECT_NOW");?>...");
$('#smail').html("<?php echo tr("SCHEDULE_END_PROCESS");?>");
setTimeout(function() {
window.location.href='?page=tracking&list_id=<?php echo $list_id;?>&token=<?php echo $token;?>';
},1000);
}
}
});
setTimeout(progresspump,5000);
}progresspump();
});
});
</script>
<div id='msg' style='display:none'>
<article class="module width_full">
<header><h3 id='send_title'><?php echo tr("PROGRESSION_OF_CURRENT_SEND");?></h3></header>
<div class="module_content">
<article class='stats_graph' style='height:143px;'>
<div class='record' style='height:30px;border: 1px solid #9BA0AF;'><div id='pct' class='bar' style='width:0%'></div></div>
<h4 id='all_done'></h4>
</article>
<article class="stats_overview">
<div class="overview_today">
<p class="overview_day"><?php echo tr("COMPOSE_SENDING");?></p>
<p class="overview_count" id='done'>0,00%</p>
<p class="overview_type">% <?php echo tr("SENDED");?></p>
<p class="overview_count" id='total_to_send'>0</p>
<p class="overview_type"><?php echo tr("TOTAL_TO_SEND");?></p>
</div>
<div class="overview_previous">
<p class="overview_day"><?php echo tr("CHRONO");?></p>
<p class="overview_count" id='ch_last'>0</p>
<p class="overview_type"><?php echo tr("LAST_TIME_SEND");?></p>
</div>
</article>
<div class="clear"></div>
</div>
<div id='if' style="height:0;"></div>
</article>
</div>
<?php
break;
/*case "done":
echo "<div align='center' class='info'>".tr("COMPOSE_SENDING")."</div>";
$error=(empty($_GET['error']) ? "0" : $_GET['error']);
$errorlog=(empty($_GET['errorlog']) ? "0" : $_GET['errorlog']);
if($error!=0){
echo "<h4 class=alert_error>".tr("ERROR_SENDING")."</h4>";
} else {
echo "<h4 class=alert_success>".tr("COMPOSE_SENT").".</h4>";
}
if($errorlog) {
echo "<h4 class=alert_error>".tr("ERROR_LOG_CREATE")."</h4>";
}
echo "<br><div align='center'><img align='middle' src='css/puce.gif'> <a href='?page=compose&list_id=".$list_id."&token=$token'>".tr("BACK")."</a></div>";
break;*/
default :
echo 'oups !';
break;
}
?>Bonjour,
J'avoue que non, je n'ai pas eu le temps !
Je vais m'y coller sur cette fin de semaine, le temps de voir les résultats, je pense d'ici mercredi j'aurai posté mes conclusions.
Bonjour,
Sincèrement, absolument aucune idée.
La procédure fonctionne normalement partout sauf chez toi... Suis un peu navré, mais pour moi, c'est un souci en amont, c'est à dire que je pense que c'est LWS qui supprime les mails.
Tu les envoies en smtp ou en php mail au fait ?
Bonjour Jérome,
Je comprends qu'en fait tu voulais lier un pmnl à une IP.
OK, pourquoi pas ? Je pense que c'est une problèmatique de cadence, n'est-ce pas ?
Alors question : est-ce que chaque IP est liée à un process smtp ?
La réponse est dans ta question : si ça part en localhost, c'est parce que ton SMTP (postfix par exemple) écoute sur ton localhost.
Et donc il ne peut y avoir d'envoi, dans ton cas actuel, qu'à partir du localhost, donc pas d'envoi sur d'autres IP, normal...
Pour répondre donc à ta question, il va falloir sur ta Jessie (debian
aller faire du tuning de ton postfix.
Je ne ferai pas de cours ou support là dessus, par contre, tu peux commencer par étudier ceci :
http://serverfault.com/questions/426060 … ltiple-ips
ATTENTION : je dégage (
) toute repsonsabilité, et je t'invite TRES FORTEMENT à backuper tes fichiers de config actuels.
Ce n'est pas une opération bien compliquée, mais ça fonctionne, je l'ai déjà vu.
Conclusion : tu as un PMNL, tu le laisses et ne poses pas plusieurs instances pmnl (dont les envois multiples et concomitants poseraient peut être des problèmes d'engorgement...).
Tu peux aussi faire du round robin d'envoi sur plusieurs IP, un exemple : https://www.howtoforge.com/community/th … sts.46282/
Bon courage !
Bonsoir !
(Mon clavier est changé, je peux enfin écrire normalement !!)
On va faire plus simple. Tu copies ce code sous include/compose.php, à la place du script actuel que tu renommes par exemple compose.bak.php (finir par php pour ne pas le code soit visible !)
<?php
$subject = ( !empty($_POST['subject']) ) ? $_POST['subject'] : '';
$message = ( !empty($_POST['message']) ) ? $_POST['message'] : '';
$format = ( !empty($_POST['format']) ) ? $_POST['format'] : '';
$encode = ( !empty($_POST['encode']) ) ? 'base64' : '8bit';
switch($op){
case 'init':
$newsletter=getConfig($cnx,$list_id,$row_config_globale['table_listsconfig']);
$newsletter_autosave=getConfig($cnx,$list_id,$row_config_globale['table_sauvegarde']);
if (!empty($_POST['import_id'])) {
$import_id = $_POST['import_id'];
}
$reset = (!empty($_GET['reset'])&&$_GET['reset']=='true') ? 'true' : 'false';
$ft = (!empty($_GET['ft'])) ? $_GET['ft'] : '';
if(getSubscribersNumbers($cnx,$row_config_globale['table_email'],$list_id)){
if (isset($import_id) && is_numeric($import_id)) {
$row = $cnx->query("SELECT date, type, subject, message, list_id FROM "
. $row_config_globale['table_archives']." WHERE id='$import_id'")->fetch(PDO::FETCH_ASSOC);
$textarea = addslashes(@htmlspecialchars($row['message']));
$subject = addslashes(@htmlspecialchars($row['subject']));
$type = $row['type'];
$cnx->query("INSERT INTO "
. $row_config_globale['table_sauvegarde']."(list_id,subject,textarea,type) VALUES ('$list_id','$subject','$textarea','$type')");
} elseif(isset($newsletter_autosave['textarea'])&&trim($newsletter_autosave['textarea'])!=''&&$reset=='false') {
$textarea = $newsletter_autosave['textarea'];
$type = 'html';
$subject = @htmlspecialchars($newsletter_autosave['subject']);
} else {
$textarea = addslashes($newsletter['header']."\n\n\n".$newsletter['footer']);
$subject = @addslashes(htmlspecialchars($newsletter['subject']));
$type = 'html';
$cnx->query("INSERT INTO "
. $row_config_globale['table_sauvegarde']."(list_id,subject,textarea,type) VALUES ('$list_id','$subject','$textarea','$type')");
}
echo "<form id='mailform' name='mailform' method='post' action='' class='post_message'>";
echo "<div align='center'><h4 class='alert_info'>".tr("COMPOSE_AND_PREVIEW").".</h4></div>";
echo '<article class="module width_3_quarter">';
echo '<header><h3 class="tabs_involved">'.tr("COMPOSE_NEW").'</h3></header>';
echo tr("COMPOSE_SUBJECT")." : ".tr("RFC_2822")."<br><br>
<input type='text' name='subject' value=\"". stripslashes($subject)
. "\" size='50' maxlength='255' id='subject' /> <span id='chars'>78</span>
<br><br>".tr("COMPOSE_MSG_BODY")." :";
echo "<textarea name='message' id='redac' rows='20' cols='70'>". stripslashes($textarea) ."</textarea>";
echo "<div id='as'><h4 class='alert_info'>".tr("START_INITIALISATION")."...</h4></div><br> </article>";
echo '<article class="module width_quarter"><div class="sticky-scroll-box">';
echo '<header><h3>'.tr("ACTIONS").' :</h3></header><div align="center">';
echo "<input type='button' value='".tr("SAVE_THIS_MESSAGE")."' id='rec' type='button' class='button' />"
."<br><br><input type='button' value='".tr("COMPOSE_RESET")."' onClick=\"parent.location='".$_SERVER['PHP_SELF']
."?page=compose&token=$token&list_id=$list_id&reset=true'\" />"
."<br><br><input type='button' value='".tr("COMPOSE_PREVIEW")." >>' onclick='Soumettre()' disabled id='send_preview' />";
echo "<br><br><input type='checkbox' name='encode' value='base64'><b>".tr("COMPOSE_ENCODE")." ?</b>";
echo "</div>";
echo '<header></header>';
echo '<header><h3>'.tr("ATTACHMENTS").'</h3></header>';
echo "<div id='pjs'></div>";
echo "<div align='center'><a href='upload.php?token=$token&list_id=$list_id' class='iframe'>".tr("ADD_ONE_OR_MORE_ATTACHMENT")."</a></div>";
echo "</div></article>";
echo "<script>$(function(){function pjs(){ $.ajax({type:\"POST\", url:\"include/pjq.php\",
data:\"token=$token&list_id=$list_id\",success:function(data){ $('#pjs').html(data);}});setTimeout(pjs,10000);}pjs();});</script>";
echo "<input type='hidden' id='type' name='format' value='html' />
<input type='hidden' name='op' value='preview' />
<input type='hidden' name='action' value='compose' />
<input type='hidden' name='page' value='compose' />
<input type='hidden' id='list_id' name='list_id' value='$list_id' />
<input type='hidden' id='token' name='token' value='$token' />
</form>";
if($ft==""){
echo "<script src='js/tinymce/tinymce.min.js'></script>
<script>
tinymce.init({
selector : 'textarea#redac',
plugins : [
'fullscreen fullpage visualblocks, preview searchreplace print insertdatetime hr',
'charmap anchor code link image paste pagebreak table contextmenu',
'filemanager table code media autoresize textcolor emoticons'
],
/*toolbar1 : 'insertfile undo redo | bold italic | forecolor colorpicker backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent',
toolbar2 : 'styleselect | fontselect fontsizeselect | emoticons | link image | filemanager | template',*/
toolbar1 : 'newdocument,print,|,bold,italic,underline,|,strikethrough,superscript,subscript,|,forecolor,backcolor,|,bullist,numlist,outdent,indent,|,visualchars,visualblocks,|,charmap,|,hr,',
toolbar2 : 'table,|,cut,copy,paste,searchreplace,|,blockquote,|,undo,redo,|,link,unlink,anchor,|,image,emoticons,media,|,inserttime,|,preview,fullscreen,code,',
toolbar3 : 'styleselect,|,formatselect,|,fontselect,|,fontsizeselect,',
style_formats: [
{title: 'Open Sans', inline: 'span', styles: { 'font-family':'Open Sans'}},
{title: 'Arial', inline: 'span', styles: { 'font-family':'arial'}},
{title: 'Book Antiqua', inline: 'span', styles: { 'font-family':'book antiqua'}},
{title: 'Comic Sans MS', inline: 'span', styles: { 'font-family':'comic sans ms,sans-serif'}},
{title: 'Courier New', inline: 'span', styles: { 'font-family':'courier new,courier'}},
{title: 'Georgia', inline: 'span', styles: { 'font-family':'georgia,palatino'}},
{title: 'Helvetica', inline: 'span', styles: { 'font-family':'helvetica'}},
{title: 'Impact', inline: 'span', styles: { 'font-family':'impact,chicago'}},
{title: 'Symbol', inline: 'span', styles: { 'font-family':'symbol'}},
{title: 'Tahoma', inline: 'span', styles: { 'font-family':'tahoma'}},
{title: 'Terminal', inline: 'span', styles: { 'font-family':'terminal,monaco'}},
{title: 'Times New Roman', inline: 'span', styles: { 'font-family':'times new roman,times'}},
{title: 'Verdana', inline: 'span', styles: { 'font-family':'Verdana'}}
],
cleanup : true,
cleanup_on_startup : true,
convert_urls : true,
custom_undo_redo_levels : 20,
doctype : '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">',
entity_encoding : 'named',
external_filemanager_path:'js/tinymce/plugins/filemanager/',
external_plugins: { 'filemanager' : 'js/tinymce/plugins/filemanager/plugin.min.js'},
extended_valid_elements: 'pre[*],style[*]',
filemanager_title:'Responsive Filemanager' ,
fontsize_formats : '8px 9px 10px 11px 12px 13px 14px 18px 24px',
forced_root_block : false,
force_br_newlines : true,
force_p_newlines : false,
height : '350',
image_advtab: true ,
inline_styles : true,
language : '".tr("TINYMCE_LANGUAGE")."',
relative_urls: false,
remove_script_host : false,
theme: 'modern',
valid_children : '+body[style|section],pre[section|div|p|br|span|img|style|h1|h2|h3|h4|h5],+*[*]',
valid_elements : '+*[*]',
verify_html : false,
menu: {
edit: {title: 'Edit', items: 'undo redo | cut copy paste | selectall'},
insert: {title: 'Insert', items: 'media image link | pagebreak'},
view: {title: 'View', items: 'visualaid'},
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'},
tools: {title: 'Tools', items: 'code'}
}
});
var elem=$('#chars');
$('#subject').limiter(78,elem);
$(document).ready(function() { Si=setInterval(save,10000); });
function save(){
tinyMCE.triggerSave();
var ds=$('#mailform').serialize();
$.ajax({
type: 'POST',
url: 'autosave.php',
data: ds,
cache: false,
success: function(msg) {
$('#as').html(msg).show();
$('#send_preview').removeAttr('disabled');
},
error: function() {
$('#as').html('<h4 class=alert_error>".tr("UNSAVED_MESSAGE")." !</h4>').show();
}
});
}
$('#rec').click(function(){ save(); });
</script>";
} elseif($ft=='else') {
echo "<script>var elem=$('#chars');$('#subject').limiter(78,elem);
$(document).ready(function() { Si=setInterval(save,10000); });
function save(){";
echo ($ft=='else'?"":"tinyMCE.triggerSave();");
echo "
$('#as').html('".tr("SAVE_PROCESS")."...').show();
var ds=$('#mailform').serialize();
$.ajax({
type: 'POST',
url: 'autosave.php',
data: ds,
cache: false,
success: function(msg) {
$('#as').html(msg).show();
},
error: function() {
$('#as').html('<h4 class=alert_error>".tr("UNSAVED_MESSAGE")." !</h4>').show();
}
});
}
$('#rec').click(function(){ save(); });
</script>";
}
echo "<script>
function Soumettre(){
if ( (document.mailform.subject.value=='') || (document.mailform.message.value=='') )
alert('".tr("ERROR_ALL_FIELDS_REQUIRED")."');
else {
document.mailform.submit();
}
}
</script>";
} else {
echo "<h4 class='alert_error'>".tr("ERROR_UNABLE_TO_SEND")."</h4>";
}
break;
case "preview":
$up = @($_GET['up']=='false' ? false : true);
if($up){
$cnx->query("UPDATE ".$row_config_globale['table_sauvegarde']."
SET textarea = '".addslashes($message)."',
subject='".addslashes($subject)."',
type='$format'
WHERE list_id='$list_id'");
}
$newsletter = getConfig($cnx,$list_id,$row_config_globale['table_listsconfig']);
$msg = getConfig($cnx,$list_id,$row_config_globale['table_sauvegarde']);
$format = $msg['type'];
if(empty($message)){
$message = stripslashes($msg['textarea']);
}
if(empty($subject)){
$subject = stripslashes($msg['subject']);
}
$subj = htmlspecialchars($subject);
if($format == "html"){
$msg = $message;
} else {
$msg = htmlspecialchars($message);
}
echo "<form method='get' action='send_preview.php' id='mailform' name='mailform'>";
echo "<div align='center'><h4 class='alert_info'>".tr("STEP_SEND_PREVIEW", $newsletter['preview_addr']).".</h4></div>";
echo "<article class='module width_full'><div style='margin:3px;'>";
echo "Preview for : <a href='' onClick='xx(320);return false;'>iPhone 4/5 (320x480),</a> "
. "<a href='' onClick='xx(360);return false;'>Nexus 5 (360x598),</a> "
. "<a href='' onClick='xx(375);return false;'>iPhone 6 (375x667),</a> "
. "<a href='' onClick='xx(384);return false;'>Nexus 4 (384x598),</a> "
. "<a href='' onClick='xx(414);return false;'>iPhone 6 Plus (414x736),</a> "
. "<a href='' onClick='xx(600);return false;'>Nexus 7 2013 (600x960),</a> "
. "<a href='' onClick='xx(750);return false;'>iPhone 6S (750x1334),</a> "
. "<a href='' onClick='xx(768);return false;'>iPad 3 (768x1024),</a> "
. "<a href='' onClick='xx(800);return false;'>Nexus 10 (800x1280)</a> ";
echo "</div></article>";
echo '<article class="module width_3_quarter">';
echo '<header><h3 class="tabs_involved">'.tr("COMPOSE_PREVIEW_TITLE").' : ' . $subj . '</h3></header>';
echo "<iframe src='preview.php?list_id=$list_id&token=$token' width='100%' height='650px' style='border:0;' id='_preview'><p>".tr("ERROR_IFRAME")."...</p></iframe></div>";
echo "<input type='hidden' name='list_id' value='$list_id'>
<input type='hidden' name='encode' value='$encode'>
<input type='hidden' name='op' value='send_preview'>
<input type='hidden' id='token' name='token' value='$token'>";
echo "</article>";
echo '<article class="module width_quarter"><div class="sticky-scroll-box">';
echo '<header><h3>Actions :</h3></header><div align="center">';
echo "<input type='button' onClick=\"window.location.href='".$_SERVER['PHP_SELF']."?page=compose&token=$token&list_id=$list_id&op=init'\"
value=\"".tr("COMPOSE_BACK")."\" />";
echo "<br><br><input type='submit' value='".tr("COMPOSE_SEND")." (Mode PREVIEW)' />";
echo "</div>";
echo '<header></header>';
echo '<header><h3>'.tr("ATTACHMENTS").'</h3></header>';
echo "<div id='pjs'></div>";
echo "<div align='center'><a href='upload.php?token=$token&list_id=$list_id' class='iframe'>".tr("ADD_ONE_OR_MORE_ATTACHMENT")."</a></div>";
echo '</article>';
echo "</form>";
echo "<script>";
echo "$(function(){function pjs(){ $.ajax({type:\"POST\", url:\"include/pjq.php\", data:\"token=$token&list_id=$list_id\",success:function(data){ $('#pjs').html(data);}});setTimeout(pjs,10000);}pjs();});";
echo "</script>";
echo "<script>
function Soumettre(){
document.mailform.submit();
}
</script>";
break;
case "send_preview":
$newsletter = getConfig($cnx,$list_id,$row_config_globale['table_listsconfig']);
$msg = getConfig($cnx,$list_id,$row_config_globale['table_sauvegarde']);
$format = $msg['type'];
if(empty($message)){
$message = stripslashes($msg['textarea']);
}
if(empty($subject)){
$subject = stripslashes($msg['subject']);
}
$subj = htmlspecialchars($subject);
if($format == "html"){
$msg = $message;
} else {
$msg = htmlspecialchars($message);
}
$error = ( empty($_GET['error']) ? "" : $_GET['error'] );
$encode = ( !empty($_GET['encode']) && $_GET['encode'] == 'base64' ) ? 'base64' : '8bit';
echo '<div class="archmsg">';
if($error==""){
echo "<div align='center'><h4 class='alert_success'>".tr("PREVIEW_SEND_OK").".</h4>";
if(isset($code_mailtester) && $code_mailtester!='') {
echo "<h4 class='advt alert_success' align='center'><a href='https://www.mail-tester.com/" . $code_mailtester . "' target='_blank'>"
. tr("CHECK_SPAM_SCORE_MAIL_TESTER")."</a></h4>";
}
echo "<h4 class='advt alert_info' align='center'>".tr("PREVIEW_OK")." ?<br>"
. tr("CLICK_TO_SEND", tr("COMPOSE_SEND")).", ".tr("COMPOSE_ELSE_BACK")."</h4></div>";
} else {
echo "<div align='center'><h4 class='alert_error'>Attention ! Le message de preview est en erreur. Motif : "
. $error ." ! Merci de corriger, puis relancer le message de preview en cliquant ici : <a href='"
. $_SERVER['PHP_SELF']."?page=compose&op=init&list_id=$list_id&token=$token'>".tr("RE_SEND_PREVIEW")."</a></h4></div>";
}
echo '<article class="module width_3_quarter">';
echo '<header><h3 class="tabs_involved">'.tr("COMPOSE_PREVIEW_TITLE").' :</h3></header>';
echo "<iframe src='preview.php?list_id=$list_id&token=$token' width='100%' height='400px' style='border:0;'><p>"
. tr("ERROR_IFRAME")."...</p></iframe>";
echo "</article>";
echo '<article class="module width_quarter"><div class="sticky-scroll-box">';
echo '<header><h3>Actions :</h3></header><div align="center">';
echo "<br><br><input type='button' value='".tr("COMPOSE_BACK")."' onClick=\"parent.location='"
. $_SERVER['PHP_SELF']."?page=compose&token=$token&list_id=$list_id&op=preview&up=false&encode=$encode'\" />";
if($error==""){
echo "<br><br><input type='button' value='".tr("COMPOSE_SEND")."' class='button' id='SendIt'>";
} else {
echo "<h4 class='alert_error'>".tr("STOP_ON_PREVIEW_ERROR")." !</h4>";
}
if($type_serveur=='dedicated'&&$exec_available){
echo "<br><br><form method='post' action=''>
<input type='submit' value='".tr("SCHEDULE_THIS_SEND")."' />
<input type='hidden' name='NEWTASK' value='SCHEDULE_NEW_TASK' />
<input type='hidden' name='list_id' value='$list_id' />
<input type='hidden' name='encode' value='$encode'>
<input type='hidden' name='page' value='task' />";
}
echo '</div>';
echo "<script>$(function(){function pjs(){ $.ajax({type:\"POST\", url:\"include/pjq.php\", data:\"token="
. $token . "&list_id=" . $list_id . "\",success:function(data){ $('#pjs').html(data);}});setTimeout(pjs,10000);}pjs();});
</script>";
echo '<header></header>';
echo '<header><h3>'.tr("ATTACHMENTS").'</h3></header>';
echo "<div id='pjs'></div>";
echo "<div align='center'><a href='upload.php?token=$token&list_id=$list_id' class='iframe'>".tr("ADD_ONE_OR_MORE_ATTACHMENT")."</a></div>";
echo '</article></div>';
?>
<script type="text/javascript">
$("#SendIt").click(function(){
$('.advt').hide('slow');
$('.archmsg').hide('slow');
$('.button').hide('slow');
$('html,body').animate({scrollTop:'0px'},500);
$('#msg').show();
$('#smail').html("<?php echo tr("PROGRESSION_OF_CURRENT_SEND");?>");
$(function(){
var begin = 0;
var sn = 0;
var step = '';
var pct = 0;
var list_id = <?php echo (($list_id)+0);?>;
var token = '<?php echo $token;?>';
var msg_id = 0;
var tts = 0;
var encode = '<?php echo $encode;?>';
function progresspump(){
$.ajax({
url:"send.php",
type: "GET",
dataType:"json",
data:'list_id=' + list_id + '&token=' + token + '&begin=' + begin + '&sn=' + sn + '&step=' + step + '&msg_id=' + msg_id + '&encode=' + encode,
success:function(rj){
begin = rj.begin;
sn = rj.sn;
step = rj.step;
pct = (rj.pct!=''?rj.pct:0);
msg_id= rj.msg_id;
tts = (typeof rj.TTS!='undefined'?rj.TTS:0);
$("#pct").css('width',pct+'%');
$("#done").html(pct+'%');
$("#total_to_send").html(sn);
$("#ch_last").html(tts);
if(pct > 99.999) {
clearInterval(progresspump);
$("#send_title").text("<?php echo tr("SEND_ENDED");?>...");
$("#all_done").html("<?php echo tr("REDIRECT_NOW");?>...");
$('#smail').html("<?php echo tr("SCHEDULE_END_PROCESS");?>");
setTimeout(function() {
window.location.href='?page=tracking&list_id=<?php echo $list_id;?>&token=<?php echo $token;?>';
},1000);
}
}
});
setTimeout(progresspump,5000);
}progresspump();
});
});
</script>
<div id='msg' style='display:none'>
<article class="module width_full">
<header><h3 id='send_title'><?php echo tr("PROGRESSION_OF_CURRENT_SEND");?></h3></header>
<div class="module_content">
<article class='stats_graph' style='height:143px;'>
<div class='record' style='height:30px;border: 1px solid #9BA0AF;'><div id='pct' class='bar' style='width:0%'></div></div>
<h4 id='all_done'></h4>
</article>
<article class="stats_overview">
<div class="overview_today">
<p class="overview_day"><?php echo tr("COMPOSE_SENDING");?></p>
<p class="overview_count" id='done'>0,00%</p>
<p class="overview_type">% <?php echo tr("SENDED");?></p>
<p class="overview_count" id='total_to_send'>0</p>
<p class="overview_type"><?php echo tr("TOTAL_TO_SEND");?></p>
</div>
<div class="overview_previous">
<p class="overview_day"><?php echo tr("CHRONO");?></p>
<p class="overview_count" id='ch_last'>0</p>
<p class="overview_type"><?php echo tr("LAST_TIME_SEND");?></p>
</div>
</article>
<div class="clear"></div>
</div>
<div id='if' style="height:0;"></div>
</article>
</div>
<?php
break;
/*case "done":
echo "<div align='center' class='info'>".tr("COMPOSE_SENDING")."</div>";
$error=(empty($_GET['error']) ? "0" : $_GET['error']);
$errorlog=(empty($_GET['errorlog']) ? "0" : $_GET['errorlog']);
if($error!=0){
echo "<h4 class=alert_error>".tr("ERROR_SENDING")."</h4>";
} else {
echo "<h4 class=alert_success>".tr("COMPOSE_SENT").".</h4>";
}
if($errorlog) {
echo "<h4 class=alert_error>".tr("ERROR_LOG_CREATE")."</h4>";
}
echo "<br><div align='center'><img align='middle' src='css/puce.gif'> <a href='?page=compose&list_id=".$list_id."&token=$token'>".tr("BACK")."</a></div>";
break;*/
default :
echo 'oups !';
break;
}
?>Ensuite, tu te déconnectes, tu te reconnectes, et tu vas sur la page de composition.
Enfin, tu vas faire une inspection de la page, toujours sous chrome, et une fois l'inspecteur de code affiché, tu cliques en restant appuyé sur le refresh du navigateur.
Il va te proposer de vider le cache et de faire une actualisation forcée. Tu choisis cette option.
Normalement, cette fois, ça DOIT s'afficher !
Enfin, dans les paramètres de configuration générale, réglages divers, tu enlèves tout dans "CHEMIN DE PHPMYNEWSLETTER"
Tiens moi au courant
Allez, hop, il faut que ça marche 
Je regarde ce soir sur mon ordi et je te dirai
Bonjour,
faire ceci :
https://www.phpmynewsletter.com/forum/t … html#p2472
est-ce que tu as bien la table email_deleted dans tes tables ? et quelle version as tu ??
Tu as bien créé un mail qui n'existait pas pour tester le undelivered ?
Tu peux regarder dans ton admin mysql que le mail n'existe pas dans la table [prefix]_email_deleted ?
Si c'est oui à la 1 et non à la 2, alors ça veut bien dire et confirmer que lws le supprime ailleurs et/ou autrement !
S'il n'arrive pas dans la boite c'est qu'il est purgé en amont.
Et par roundcube tu le fais peut être partir via un smtp !
En tout cas, quelque chose m'échappe...
La rubrique de gestion des abonnés, oui tu la vois quand tu es en mode dédié, normal, puisque tu gères les retours.
Le premier message que tu m'as fait parvenir comprenait bien le mail en erreur :
Array
(
[token] => 1
[processed] => 1
[subject] => Undelivered Mail Returned to Sender
[type] => bounce
[recipients] => Array
(
[0] => Array
(
[action] => failed
[status] => 5.5.0
[email] => fhoghve554551ebbt@laposte.net
[bounce_type] => soft
[bounce_cat] => content_reject
[remove] =>
)
)
)Alors normalement il aurait du être pris en compte en rebasculant en mode production.
Si après avoir fait ta purge, ton second mail, le mail en erreur n'y est plus, ça veut dire qu'il a été ramassé autrement !
Franchement, les fantômes dans les mailbox, c'est pas top !
Tu es sur de ne pas l'avoir dans ta liste de mails en erreur (gestion des abonnés, tout en bas : GESTION DES ADRESSES MAILS (ABONNÉS) EN ERREUR) ?
Parce que si tu ne l'as pas, franchement, j'y perds mon latin !
Bonjour,
Installation en sous domaine ?
https://www.phpmynewsletter.com/forum/t … age-1.html
Merci beaucoup !
De rien !
Sur les deux fichiers ?
archive.php
compose.php
Bravo, bonne observation -> OUI !
J'adore que l'on décortique le code !
Toutes les remarques sont les bienvenues 
Alors j'espère que mon code ne choque pas !!
Sinon, je ne savais pas pour python, que je respecte totalement, et qui me rend bien service dans un autre monde... Mais je ne suis qu'utilisateur...
Bonjour et bienvenue sur le forum !
Ce 5000, c'est le timer de reload du script d'envoi, ça fait 5 secondes.
Donc il faut 1 mail toutes les 3600/250=14,4, donc toutes les 15 secondes, donc y mettre 15000.
Et mettre 1 mail à chaque boucle dans les paramètres d'envoi.
Voilà !