Index de l'article

Acymailing est une extension Joomla permettant de mettre en place des outils newsletter du plus simple au plus puissant (filtres, vitesses d'envoi, tracking, stats, relai SMTP...). Ce système open-source existe en version gratuite (déjà très performante) ou payante (très abordable). L'extension peut bien sûr être overridée.

Cependant son développement régulier rend l'utilisation des overrides plus lourd que la modification directe du code source. En effet dans certains contextes (multi-utilisateurs, multi-bases, flotte d'outils...), les overrides risquent d'être complexes à maintenir dans le temps.

C'est en tout cas mon impression en utilisation intensive d'Acy. Certaines MAJ peuvent toucher les fichiers originaux et ne pas être prises en compte dans vos overrides... Mieux vaut donc connaître un minimum le code de l'extension et avoir quelques repères.

Ici quelques notes personnelles me permettant de maintenir facilement mes outils. Rappellons l'ancien forum encore en ligne d'où proviennent certaines de ces astuces (le support a évolué vers un système plus personnalisé).

emc1

Cet article est principalement destiné aux joomlistes avancés souhaitant personnaliser ou optimiser leurs applications newsletter.

Le paragraphe Quelques liens s'adresse généralement à tous webworkers digitaux (marketeurs, intégrateurs, graphistes...).

Le paragraphe Relai SMTP évoque  le relai Elastic Email en contexte de mass sending.

Et non, je ne travaille pas pour eux.


Abonnements

Modifier le nom des listes sur le module de souscription

Intéressant dans un contexte où vous manipulez de nombreuses listes, avec vos propres noms de listes, standardisés pour votre travail, mais que vous souhaitez être plus explicite pour l'abonné (en front).

1) Créez un champ supplémentaire dans la table _acymailing_list, nommé ici my_public_name par l'exemple, et overridez le fichier components \ com_acymailing \ views \ user \ tmpl \ subs_default.php en remplaçant name par my_public_name (vers la ligne 23).

2) Ainsi que le fichier le fichier modules / mod_acymailing / tmpl / default.php en remplaçant cette chaîne (vers la ligne 62) :

[$myListId]->name ;

Par celle-ci :

[$myListId]->my_public_name ;

3) Ajoutez le champ dans le formulaire de gestion en back.

Dans le fichier administrator \ components \ com_acymailing \ views \ list \ tmpl \ form.php, juste après le 1er  tr, ajoutez un autre tr de ce type :

<tr>
<td class="acykey">
<label for="my_public_name">
<?php echo 'Public name'; ?>
</label>
</td>
<td>
<input type="text" name="data[list][my_public_name]" id="my_public_name" class="inputbox" style="width:200px" value="<?php echo $this->escape(@$this->list->my_public_name); ?>"/>
</td>
</tr>

4) Dans administrator \ components \ com_acymailing \ views \ list \ tmpl \ listing.php, juste après le th LIST_NAMEaux environs de la ligne 62, ajoutez un autre th de ce type :

<th class="title">
<?php echo acymailing_gridSort('Public name', 'a.my_public_name', $this->pageInfo->filter->order->dir, $this->pageInfo->filter->order->value); ?>
</th>

5) Enfin, dans le même fichier administrator \ components \ com_acymailing \ views \ list \ tmpl \ listing.php, juste après le td $row->name aux environs de la ligne 127, ajoutez un autre td de ce type :

<td>
<?php
echo acymailing_tooltip($row->description, $row->my_public_name, 'tooltip.png', $row->my_public_name, acymailing_completeLink((acymailing_isAdmin() ? '' : 'front').'list&task=edit&listid='.$row->listid));
?>
</td>

6) Ensuite vous pouvez customiser leur affichage en front via des sélecteurs CSS. Exemple :

.acymailing_lists tr:nth-child(22) label,
.acymailing_lists tr:nth-child(24) label {
margin-bottom: 15px !important;
}

7) Leur ordre d'affichage se gère dans le champ ordering.

Limiter les désinscriptions

On peut souhaiter limiter les unsubs à la désincription de la seule liste concernée, et pas à toutes les listes ou à tout le site (dans la page de désinscription, la balise unsubscribe menant aux 3 choix natifs).

La désinscription de la liste utilisée étant déjà cochée par défaut, il suffit de masquer l'intégralité des options. Une ligne CSS fera l'affaire :

div.unsuboptions {
display:none
}

Attention : cette pratique reste déconseillée (voir interdite, RGPD...) et doit se faire en parfaite connaissance de cause (sur des envois ciblés, selon le contexte ou avec des explications claires por l'abonné...).


Exports

Corriger la disparition de l'export des liens cliqués en front [obsolète depuis 5.7 - inutile - pour mémoire]

Au moins jusqu'à la version 5.2.0 d'Acy, sur certaines instances, pouvait apparaître un bug sur l'export des stats des users clicked on a link, ayant pour effet de masquer les cases à cocher des champs concernés (et d'afficher à la place les champs des comportement des utilisateurs, les userstats des users opened the email). Ce problème n'était pas clairement identifié car ne survenait que sur certaines plateformes, et était lié aux sessions (ne m'en demandez pas plus...).

Si c'est votre cas, vous pouvez corriger cela dans le fichier components / com_acymailing / controllers / frontnewsletter.php, tout en bas, la fonction export, qui doit ressembler à cela :

function export(){

$mailid = JRequest::getInt('mailid', 0); if(!empty($mailid)) JRequest::setVar('filter_mail', $mailid); if(strlen(JRequest::getVar('filter_url', '')) > 0){ $controller = 'statsurl'; }else{ $controller = 'stats'; } include_once(ACYMAILING_BACK.'controllers'.DS.$controller.'.php'); $controller = ucfirst($controller).'Controller'; $statsController = new $controller(); $statsController->export(); }

Merci à Dax, de l'équipe Acymailing !

Modifier le nom des fichiers des stats exportés depuis le front

Si besoin, dans administrator / components / com_acymailing / controllers / data.php, près de la ligne 270, remplacez :

$fileName = 'export_'.date('Y-m-d');

Par :

$fileName = 'MonSite_'.date('Y-m-d');

Convertir le champ date TIMESTAMP en DATE TIME depuis la BDD

Exemple avec la table des subscribers :

select
subid,
FROM_UNIXTIME(created) as created,
email,
name
from joo_acymailing_subscriber

Ou en ajoutant des heures, pour gérer les heures d'été/hiver :

select
mailid,subject,
DATE_ADD(FROM_UNIXTIME(senddate) , INTERVAL 7 hour) as senddate,
fromname, fromemail, replyname, replyemail, alias
from joo_acymailing_mail

Filtres et expressions régulières

Augmenter le nombre de valeurs dans les listes déroulantes des filtres dans l'édition des emails

En back, on peut déjà largement personnaliser l'affichage des champs en édition d'utilisateurs, mais cela n'est pas encore pris en compte dans l'affichage de ces champs en mode envoi d'email (après sélection des listes)... Qu'à cela ne tienne ! Si certaines de vos listes déroulantes ont disparues, c'est aussi à cause d'une clause SQL de LIMIT par défaut bridée à 100, dans plugins / acymailing / tagsubscriber / tagsubscriber.php lignes 182 et 186. La modifier vous permettra déjà de recréer dynamiquement vos listes déroulantes les plus longues. Personnellement je règle à 2000.

Classer les valeurs des listes déroulantes des filtres en ordre aphabêtique

En effet à cet endroit, ces listes se génèrent dynamiquement (et sont par défaut bridée à 100, voire au-dessus), mais l'ordre de leurs valeurs est aléatoire...

Pour les classer par ordre alphabêtique, ajoutez un ORDER BY juste avant le LIMIT concluant la requête SQL ligne 182 du fichier plugins/acymailing/tagsubscriber/tagsubscriber.php. Sous cette forme :

$query = 'SELECT DISTINCT `'.acymailing_secureField($map).'` AS value FROM #__acymailing_subscriber ORDER BY `'.acymailing_secureField($map).'` ASC LIMIT 2000';

Attention : les guillemets sont de types différents, et supportent parfois mal les copier-coller. Au pire vous les retrouverez dans le code, au début de la requête, où le secureField est déjà utilisé avec les bons types de guillemets.

Masquer des champs des filtres dans l'édition des emails

Par défaut tous les champs apparaissent, ce grand nombre de champs et d'options est un peu déstabilisant pour les utilisateurs, on peut souhaiter en cacher certains. Si vous vous sentez de le faire en PHP, vous pouvez attaquer le fichier plugins/acymailing/tagsubscriber/tagsubscriber.php, sinon quelques lignes de CSS en viendront à bout, puisqu'il ne s'agit que de masquer certaines options.

Utilisez un display: none en récupérant les attributs de cette façon :

select#filter0acymailingfieldmap option[value |= CHAMP1],
select#filtertype0 option[value |= GROUPE_CHAMP1]

Utiliser les expressions régulières

Parfois les filtres de vos champs personnalisées sont insuffisants (souvent de par l'impossibilité d'ajouter des filtres OR). Utilisez donc une expression régulière (REGEXP dans les filtres), pour ne sélectionner que certaines valeurs d'un champ :

Valeur1|Valeur2|Valeur3

Ou encore pour ne sélectionner que les départements de la région PACA par exemple (une ancienne région rançaise). Si vos codes postaux sont correctement remplis, et accompagné d'un filtre country = 'FRANCE' :, mettez un filtre regex sur le zipcode pour ne sélectionner que les contacts dont le zipcode commence par :

^04|^05|^06|^13|^83|^84

Expéditeur

Contraindre l'adresse de l'expéditeur

En cas d'usage massif, limiter les choix permis dans l'adresse de l'expéditeur, avec une liste déroulante par exemple, est important pour concorder avec les paramétrages DNS, SPF ou DKIM (en conservant des suffixes d'adresses emails identiques au nom de domaine, après l'arobas). Cela afin de maximiser vos taux de réceptions et d'ouvertures. Vous pouvez ainsi modifier le code source du fichier administrator \ components \ com_acymailing \ views\newsletter \ tmpl \ param.form.php aux environ de la ligne 87 (cherchez la chaîne FROM_ADDRESS). Remplacez le contenu de sa balise td (class="paramlist_value") par un code de ce type :

<?php
$valuesMail = array();
$valuesMail[] = JHTML::_('select.option', Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.', Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.');
$valuesMail[] = JHTML::_('select.option', Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.', Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.');
$listeEmail = JHTML::_('select.genericlist',$valuesMail, "data[mail][fromemail]" , 'style="width:200px; max-width:80%;" class="inputbox"', 'value', 'text', $this->escape(@$this->mail->fromemail),'fromemail');
echo $listeEmail;
?>

Annotez l'adresse de Reply-To

Si vous faîtes de temps en temps une gestion manuelle des rebonds, vous ne souhaitez pas que les collaborateurs mettent une mauvaise adresse de reply-to, même dans le cas où ils ne souhaitent pas de réponse (no-reply@...). Vous ne souhaitez pas non plus les brider ici par une liste déroulante, car ils doivent tout de même pouvoir y mettre n'importe quelle adresse utile. Faîtes une simple annotation précisant l'adresse de reply-to, que les collaborateurs pourront copier-coller.

Dans le même fichier administrator \ components \ com_acymailing \ views\newsletter \ tmpl \ param.form.php, près de la balise td paramlist_key du REPLYTO_ADDRESS (vers la ligne 113) :

<div style="font-size: 15px">(If you do not wish to have an answer, use the address <b style="color: #XXXX;">Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</b>)</div>

Et dans votre CSS, ajoutez cette ligne afin de réduire la largeur finale de la table (qui va grandir en front, suite à votre annotation, et rendre le formulaire moins clair) :

#mail_sender table{
width: 50% !important;
}

Google et les extensions des domaines internet (TLD, janvier 2018)

Le support d'un grand relai SMTP m'expliquait récemment (janvier 2018) que les serveurs Gmail de Google traitaient mieux les messages provenant de domaines aux TLD bien établis (typiquement les .com / .net / .org ; et ceux par pays : .fr /.uk /.de...).

À l'inverse, les extensions moins connues (récentes, gratuites ou à bas coût) sont pénalisées par Google (exemples : .xyz, .online, .party, .click...).

Comme elles sont plus faciles à obtenir par les spammeurs (ou s'intégrant mieux dans un projet malhonnête...), Gmail les identifierait de manière préventive comme étant risquées, et limiterait leur traffic sur les serveurs Google.

Aucune documentation n'existe encore à ce sujet semble-t-il. Mon interlocuteur - spécialisé et fiable, j'en témoigne - m'expliquait cela suite à ses propres observations de canaux de courriers et à des discussions avec d'autres experts de la délivrabilité. J'ai moi-même constaté qu'avec 2 outils .online, j'avais de moins bonnes statistiques que sur d'autres outils pointant sur les mêmes bases et aux emailings de la même teneur. Ces deux domaines ont également été vite blacklistés par AdBlockPlus.

WordToTheWise propose une méthode pour établir une bonne réputation chez GMail :
https://wordtothewise.com/2017/09/warmup-advice-gmail/

Et à ne pas oublier, l'outil PostMasterTool pour Gmail.


CSS

Personnaliser le module de souscription frontale

Très utile pour permettre la gestion de leur souscription par les abonnés eux-même, partiellement ou complètement (#RGPD...).

Utile également pour modifier le nom des listes affichées en frontale, si vous voulez conserver des appellations typées en interne, mais mettre un texte ou un nom grand public en frontale.

Ainsi que pour gérer le responsive, si vous affichez des champs customisés par exemple.

.acymailing_lists{
margin-bottom: 15px ;
margin-top: 15px ;
}

/* LISTE 1 */
.acymailing_lists tr:nth-child(1) label{
color: white ;
}
input#acylist_4:after{
margin-top: -4px;
margin-left: 20px;
font-size: 20px ;
content: "Subscribe to our newsletter about liste 1" ;
position: fixed;
}

/* LISTE 2 */
.acymailing_lists tr:nth-child(2) label{
color: white ;
}
input#acylist_29:after{
margin-top: -4px;
margin-left: 20px;
font-size: 20px ;
content: "Subscribe to our newsletter about liste 2" ;
position: fixed;
}

/* MOBILE */
@media screen and (max-width: 520px) {
.acymailing_lists tr label{
display: grid;
}
input#acylist_29:after,
input#acylist_4:after{
margin-top: -16px;
}
}
@media screen and (max-width: 620px) {
table.acymailing_form {
}
table.acymailing_form tr{
display: grid;
}
}

N'oubliez pas que dans les options du module, vous pouvez ordonner les listes disponibles (manuellement, en déplaçant les ID des listes voulues).

Personnaliser l'affichage des listes en mode création et édition de newsletter en front

Par exemple :

#filter_list option[value="VOTRE_ID_LISTE"],
#filter_msg option[value="list_VOTRE_ID_LISTE"],
.acymailing_table tr#acylistrow_VOTRE_ID_LISTE
{
color: #FFF ;
background-color: #91acd7 ;
font-weight: bold ;
font-size: 15px;
}

.acymailing_table tr#acylistrow_VOTRE_ID_LISTE td
{
color: #FFF ;
}

Personnaliser l'ordre d'affichage des listes en mode création et édition de newsletter en front

Utilisez le champ ordering dans la table _acymailing_list.

Ajouter classe CSS aux boutons d'export et de suppresion des données abonné en front

Dans components \ com_acymailing \ views \ user \ tmpl \ modify.php, vers la ligne 113, remplacez :

<div style="clear: both; padding-top: 5px;">

par :

<div style="clear: both; padding-top: 5px;" class="mes_boutons">

Ajouter les classes manquantes des interfaces frontales de gestion des contacts [obsolète depuis 5.8.1 - inutile - pour mémoire]

Pour l'interface front de gestion des newsletters, on a une classe CSS globale acynewsletterlisting, mais pas pour la gestion frontale des contacts. Vous pouvez toutefois l'overider à partir du fichier :

administrator \ components \ com_acymailing \ views \ subscriber \ tmpl \ listing.php

Dans la 1ère div par exemple :

<div id="acy_content" class="ma_classe_sub" >

Ajouter les classes manquantes des interfaces frontales de gestion des statistiques

Et pour l'interface frontale des statistiques, dans administrator \ components \ com_acymailing \ views \ stats \ tmpl \ listing.php :

<div id="acy_content" class="ma_classe_stat" >

Attention : vérifiez que ce défaut n'est pas déjà corrigé au moment où vous lisez ces lignes, vous vous épargnerez du travail de maintenance. Et auquel cas, utilisez les classes CSS officielles.

Icône d'accès aux stats des newsletters en front

C'est toujours sympa de personnaliser au maximum le front. J'aime bien changer l'icône d'accès aux stats par le logo du site. Une bête en CSS pourra doute changer la source de l'image via l'override prévu dans la configuration d'Acy, mais tant que je n'ai pas trouvé (sigh!), je me contente de changer l'image située media / com_acymailing / images / icons / icon-16-stats.png par un .png en fond transprent de 16x16.

Mettez aussi une sauvegarde de l'image juste à coté, car les MAJ d'Acy risquent d'écraser votre image perso (d'où l'intérêt de le mettre dans l'override CSS...).

Formulaire des informations d'un abonné en front

Si vous avez des champs personnalisés, les 2 blocs d'informations s'affichent l'un en dessous de l'autre. De même l'historique utilisateur, tout en bas de ce formulaire, n'exploite pas toute la largeur disponible. Changez avec ce code :

/* MODIFIER FORMULAIRE UTILISATEUR EN FRONT AVEC CHAMPS PERSOS - PROTOSTAR - BOOTSTRAP 2 */
#acy_subscriber_form_menu ~ div#acy_content div.onelineblockoptions {
max-width: 360px;
float: left;
}
.onelineblockoptions.acytabsystem {
max-width: none !important;
float: none !important;
margin-left: 20px;
}
.onelineblockoptions{
margin-left: 20px;
}
div#acysubscriberinfo {
max-width: none;
}
.onelineblockoptions .acyblocktitle {
display: none;
}
.onelineblockoptions .acymailing_table td{
border-bottom: 0px !important;
}
.onelineblockoptions .acy_onefield .acykey{
margin-top:2px;
width: 150px;
}
.onelineblockoptions .acy_onefield select{
width: 255px;
}
.onelineblockoptions .acy_onefield input{
width: 247px;
}
.onelineblockoptions .acy_onefield label{
color: #777;
}
.onelineblockoptions #trCHAMPPERSO1,
.onelineblockoptions #trCHAMPPERSO2...,
{
display: flex;
margin-bottom: 0.3px;
}
#acysubscriberinfo .btn.active {
background-color: #6AC4F1 !important;
}

 


Navigateurs

Parfois Chrome bloque la page en annonçant ERR_BLOCKED_BY_XSS_AUDITOR

Pour éviter cela j'ajoute l'entête :

header('X-XSS-Protection: 0');

Cela en haut de la page index.php des templates utilisés. Attention à faire en parfaite connaissance de cause !


Interfaces de gestion

Modifier l'URL de redirection après programmation d'un envoi en front (schedule)

Quand vous avez beaucoup customisé l'interface de gestion frontale des newsletters, vous souhaitez parfois rediriger plus précisément un utilisateur qui vient de programmer un email.

Dans le fichier components \ com_acymailing \ controllers \ frontnewsletter.php aux environs de la ligne 152, modifiez l'URL dans la variable $redirecturl de la fonction schedule, sous redirect_schedule :

if(empty($redirecturl)) $redirecturl = "MonURL" ;

La fonction schedule étant ensuite appelée dans le fichier components \ com_acymailing \ views \ frontnewsletter \ tmpl \ scheduleconfirm.php.

Modifier l'URL de redirection après annulation d'un envoi en front (cancel)

C'est légèrement différent que précédemment, car cette fois il s'agit d'un lien dynamique en fonction de son appel du back ou du front.

Dans le fichier administrator \ components \ com_acymailing \ views \ newsletter \ tmpl \ listing.php aux environs de la ligne 182, sous les données du champ senddate, modifiez le bouton. Par exemple :

<button class="acymailing_button" onclick="if(confirm('<?php echo str_replace("'", "\'", acymailing_translation_sprintf('ACY_VALID_DELETE_FROM_QUEUE', $row->countqueued)); ?>')){ window.location.href = '<?php echo acymailing_baseURI(); ?><?php if(acymailing_isAdmin()) echo 'index.php?option=com_acymailing&ctrl=newsletter&task=cancelNewsletter&'; ?><?php if(!acymailing_isAdmin()) echo 'emailing/index.php?option=com_acymailing&ctrl=frontnewsletter&task=cancelNewsletter&'; ?><?php echo acymailing_getFormToken(); ?>&mailid=<?php echo $row->mailid; ?>'; } return false;">
<?php echo acymailing_translation('ACY_CANCEL'); ?>
</button>

Dans mon cas j'ajoute l'alias d'un lien de menu (emailing), vers lequel je veux rediriger les utilisateurs en front, mais pas en back.

Ajouter le champ summary dans les interfaces de gestion des newsletters

Dans le fichier administrator \ components \ com_acymailing \ views \ newsletter \ tmpl \ listing.php,  commencez par afficher le nom du champ.

1) Un th sous subject (th class="title") et lists (title titlelist) par exemple, aux environs de la ligne 57 :

<th class="title">SUMMARY
</th>

2) Puis la collone des données, un peu plus bas dans le fichier, aux environs de la ligne 159, un autre td entre le bloc du $row->subject et celui du mailToLists :

<!-- SUMMARY FIELD -->
<td align="center" style="text-align:left">
<?php echo $row->summary; ?>
</td>

Mais les données nes ont pas encore disponibles, ils vous faut encore les intégrer aux données appelées par l'application, dans le fichier administrator \ components \ com_acymailing \ views\newsletter \ view.html.php.

3) D'abord dans le $searchMap de la fonction listing (autour de la ligne 56) :

$searchMap = array('a.mailid', 'a.alias', 'a.subject', 'a.summary', 'a.fromname', ...

4) Dans sa variable $selection aux environs de la ligne 84 :

$selection = array('a.mailid', 'a.alias', 'a.subject', 'a.summary', 'a.fromname', 'a.fromemail'...

5) Puis dans le $myTemplate de la fonction form (autour de la ligne 325) :

if(!empty($myTemplate->tempid)){
$mail->body = acymailing_absoluteURL($myTemplate->body);
$mail->altbody = $myTemplate->altbody;
$mail->tempid = $myTemplate->tempid;
$mail->subject = $myTemplate->subject;
$mail->summary = $myTemplate->summary;
$mail->replyname = $myTemplate->replyname;
$mail->replyemail = $myTemplate->replyemail;
$mail->fromname = $myTemplate->fromname;
$mail->fromemail = $myTemplate->fromemail;
}

Ajouter le champ source dans les fiches des abonnés

Le champ source est un champ Acymailing par défaut, mais vous l'utilisez sans doute. Il n'apparaît donc pas classiquement dans les extra fieds.

Pour l'ajouter, dans administrator / components / com_acymailing / views\subscriber / tmpl / extrafields.form.php, au début de la div id="acyuserinfo" :

<tr id="trname" >
<td width="150" class="acykey">
<label for="name"style="margin-bottom:25px;">
<?php echo acymailing_translation('Source'); ?>
</label>
</td>
<td>
<?php
if(empty($this->subscriber->userid)){
echo '<input type="text" name="data[subscriber][source]" id="name" class="inputbox" style="width:60%;" value="'.$this->escape(@$this->subscriber->source).'" />';
}else{
echo $this->escape($this->subscriber->source);
}
?>
</td>
</tr>

Personnaliser le formulaire de souscription

Ici un exemple de personnalisation avec le CCK Fabrik.

Personnaliser le formulaire de modification des informations utilisateur

Pratqiue pour informer l'utilisateur de vos politiques de confidentialité par exemple.

Faîtes-le ici, afin d'être sûr que l'utilisateur utilisant un lien tag dans une newsletter, puisse les voir :

components \ com_acymailing \ views \ user \ tmpl \ modify.php

Juste après le legend de USER_INFORMATIONS par exemple :

<div id="compliancy_acy" class="well" style="margin-left: auto;margin-right: auto;width: 600px ;font-size : 14px ;font-style : italic ; line-height : 18px">
In accordance with the latest international data protection regulations, you have access to your data and can modify or delete it at any time.
<br><br>To unsubscribe from a mailing list, or to never receive email from us again, use the footer link of all our emails please.
<br><br>If you have any questions, send an email to <a href="mailto:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.?subject=Data protection regulations">Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</a>.
<br><br>View our full <a href="https://www.informaexhibitions.com/en/privacy-policy.html" target="_blank">privacy policy</a>.
</div>

Ajouter une classe CSS aux boutons d'export et de suppresion des données

Dans components \ com_acymailing \ views \ user \ tmpl \ modify.php, vers la ligne 113, remplacez :

<div style="clear: both; padding-top: 5px;">

par :

<div style="clear: both; padding-top: 5px;" class="mes_boutons">

Retirer les appels de polices externes ou de certains liens des statistiques

Ici nos stats sont polluées par des appels Google-Fonts :

SELECT * FROM joo_acymailing_urlclick
INNER JOIN joo_acymailing_url ON joo_acymailing_urlclick.urlid = joo_acymailing_url.urlid
WHERE url LIKE '%fonts.googleapis.com%' ;

Nous les supprimons ainsi :

DELETE FROM joo_acymailing_urlclick
WHERE joo_acymailing_urlclick.urlid IN
(SELECT urlid FROM joo_acymailing_url WHERE url LIKE '%fonts.googleapis.com%') ;

Ajouter une phrase au-dessus du bouton de suppression des données

Toujours dans components \ com_acymailing \ views \ user \ tmpl \ modify.php, vers la ligne 124, ajouter ceci juste entre le table cellpadding et le tr exportButton :

<div style="width: 400px; margin-top: 20px ; margin-bottom: 5px ;">
Our data policy allows you to completely delete the data stored and collected on this site.
</div>

Correction automatique des liens HTTPS externes dans les newsletters

Utiliser des outils emailing en HTTPS est nécessaire pour une bonne délivrabilité. Afin de sécuriser les liens view on line - souvent très utilisés par les abonnés - mais aussi pour la bonne réception en messagerie (emails bloqués, images non-affichées, réputation de l'expéditeur...).

Acymailing peut déjà prendre en compte l'éventuel HTTPS de vos outils (une option à activer dans l'administation), ce qui permet d'éviter certains oublis depuis l'outil lui-même.

Mais des contenus externes sont parfois incluent dans les newsletters (images, liens...), pas toujours en HTTPS. Un seul contenu non-sécurisé suffira alors à briser le HTTPS de votre newsletter (la partie verte de l'URL deviendra noire et un icône d'information apparaît, selon les navigateurs).

Pour conserver un HTTPS bien vert dans vos outils - et éviter les messages angoissants des navigateurs - tous vos contenus doivent être en HTTPS.

Or en contexte de mass sending, ou d'utilisation industrielle des outils, les collaborateurs utilisent parfois Filezilla, Dreamweaver, Notepad... Ils codent eux-mêmes les newsletters, copient-collent des liens, les écrivent manuellement, reçoivent des templates parfois doûteux de leurs partenaires, etc... Ainsi des liens non-HTTPS peuvent atterir dans les newsletters.

Parfois cela n'est pas évitable autrement qu'en rappelant aux collaborateurs les bonnes pratiques (rapatrier les images externes sur un serveur HTTPS, ne pas inclure de lien non-HTTPS...).

Mais dans d'autres cas, l'utilisation de contenus externes est justifiée si les serveurs utilisés sont eux-mêmes en HTTPS (gain de temps, travail collaboratif, économie d'espace disque...). Des erreurs peuvent alors persister selon les usages (écriture manuelle des liens, sites mis à jour, favoris mal enregistrés dans les outils tiers, navigateurs, serveurs FTP, environnements de travail...).

Si les sites HTTPS récurrents sont bien identifiés, vous pouvez corriger automatiquement les erreurs les plus courantes via une tâche programmée. Avec par exemple ce type de code SQL :

UPDATE #_acymailing_mail SET body = REPLACE(body , 'http://www.SiteInterne' , 'https://SiteInterne') ;
UPDATE #_acymailing_mail SET body = REPLACE(body , 'https://www.SiteInterne' , 'https://SiteInterne') ;
UPDATE #_acymailing_mail SET body = REPLACE(body , 'http://SiteInterne' , 'https://SiteInterne') ;

UPDATE #_acymailing_mail SET body = REPLACE(body , 'http://www.SiteExterne1' , 'https://SiteExterne1') ;
UPDATE #_acymailing_mail SET body = REPLACE(body , 'https://www.SiteExterne1' , 'https://SiteExterne1') ;
UPDATE #_acymailing_mail SET body = REPLACE(body , 'http://SiteExterne1' , 'https://SiteExterne1') ;

UPDATE #_acymailing_mail SET body = REPLACE(body , 'http://www.SiteExterne2' , 'https://SiteExterne2') ;
UPDATE #_acymailing_mail SET body = REPLACE(body , 'https://www.SiteExterne2' , 'https://SiteExterne2') ;
UPDATE #_acymailing_mail SET body = REPLACE(body , 'http://SiteExterne2' , 'https://SiteExterne2') ;


UPDATE #_acymailing_url SET name = REPLACE(name , 'http://www.SiteInterne' , 'https://SiteInterne'), url = REPLACE(url , 'http://www.SiteInterne' , 'https://SiteInterne') ;
UPDATE #_acymailing_url SET name = REPLACE(name , 'https://www.SiteInterne' , 'https://SiteInterne'), url = REPLACE(url , 'https://www.SiteInterne' , 'https://SiteInterne') ;
UPDATE #_acymailing_url SET name = REPLACE(name , 'http://SiteInterne' , 'https://SiteInterne'), url = REPLACE(url , 'http://SiteInterne' , 'https://SiteInterne') ;

UPDATE #_acymailing_url SET name = REPLACE(name , 'http://www.SiteExterne1' , 'https://SiteExterne1'), url = REPLACE(url , 'http://www.SiteExterne1' , 'https://SiteExterne1') ;
UPDATE #_acymailing_url SET name = REPLACE(name , 'https://www.SiteExterne1' , 'https://SiteExterne1'), url = REPLACE(url , 'https://www.SiteExterne1' , 'https://SiteExterne1') ;
UPDATE #_acymailing_url SET name = REPLACE(name , 'http://SiteExterne1' , 'https://SiteExterne1'), url = REPLACE(url , 'http://SiteExterne1' , 'https://SiteExterne1') ;

UPDATE #_acymailing_url SET name = REPLACE(name , 'http://www.SiteExterne2' , 'https://SiteExterne2'), url = REPLACE(url , 'http://www.SiteExterne2' , 'https://SiteExterne2') ;
UPDATE #_acymailing_url SET name = REPLACE(name , 'https://www.SiteExterne2' , 'https://SiteExterne2'), url = REPLACE(url , 'https://www.SiteExterne2' , 'https://SiteExterne2') ;
UPDATE #_acymailing_url SET name = REPLACE(name , 'http://SiteExterne2' , 'https://SiteExterne2'), url = REPLACE(url , 'http://SiteExterne2' , 'https://SiteExterne2') ;

Attention : le corps des newsletters est stocké dans la table #_acymailing_mail (champ body), mais pensez à inclure également la table #_acymailing_url dans votre code (à partir du 3ème paragraphe de l'exemple ci-dessus). En effet Acy copie dans cette table les liens saisis via l'éditeur, à des fins statistiques notamment. Et dans cette table, deux champs peuvent potentiellement contenir des erreurs (name et url, ici tous deux corrigés).


Relai SMTP

Envoi massif

Si vous faîtes une utilisation industrielle de vos outils emailing (mass sending), vous pouvez faire face à certaines limitations de l'hébergeur ou surcharger votre serveur. Mieux vaut passer par un relai SMTP tiers.

Ce n'est pas leur faire trop de pub que de citer Elasticemail, puisque son intégration avec Acy est nativement prévue dans l'extension. L'interface d'Elastic est également très ergonomique pour vos différent réglages coté SMTP. Pensez à utiliser des sous-accomptes (subaccount) pour chaque outil emailing, cela permettra une meilleure gestion des envois et des retours.

Côté Acy, vous utiliserez des clés d'API fournies par Elastic. Du coté de votre hébergeur, vous aurez des modifications un peu fines à apporter sur vos zones DNS (MX, DKIM, SPF et tracking). Les documentations officielles d'Acy et d'Elastic en traitent largement, mais vérifiez que votre hébergeur vous le permet et prévoyez un temps d'appropriation et de tests des manipulation (la 1ère fois du moins, c'est finalement très simple chez tous les grands hébergeurs).

Cette façon de faire est également gage de sécurité et vous forcera à adopter de bonnes pratiques, car le mass sending est l'objet de restrictions et de réglementations nationales et internationales. C'est ici tout un chapitre, mais pensez bien à fournir des liens de désinscriptions valides, vérifiez le bon fonctionnement de vos stats et historiques, et qualifiez vos bases.

Lien de désinscription (IMPORTANT, Elastic Email, mai 2017, MAJ sept 2017)

Les mises à jour du système de relai SMTP Elasticemail sont fréquentes... Ainsi depuis début 2017, le lien de désinscription natif d'Acymailing n'est plus correctement pris en compte dans les emails envoyés via Elasticemail. En effet il fonctionne toujours mais ne permet pas de bloquer le lien de désinscription coté Elasticemail.

Ce problème, qui ne se produit pas dans les vues en ligne, ajoutera un triste Manage email preference en bas des emails reçus en messagerie... C'est d'autant peu souhaitable que ce lien mène vers un formulaire de désinscription coté SMTP (désinscription définitive et non-prises en compte dans l'historique Acy. Vous continuez donc à leur envoyer, et à payer pour rien...).

Pour corriger le souci, il ne faut plus d'utiliser le classique tag unsubscribe d'Acy (mai 2017), mais plutôt ce lien :

<a href = "{unsubscribe:{unsubscribe}{/unsubscribe}}">Unsubscribe</a>

Attention : ce lien ne fonctionnera pas si vous avez activé la ré-écriture en clair des URLs (SEF) coté Acymailing - pas de souci pour l'activation des URLs SEF coté Joomla (sept 2017).

Lien de d'inscription/ré-inscription (Elastic Email, avril 2017)

Pour de nombreuses raisons (erreur, bouncespamcomplaintpruning...), des adresses emails peuvent être bloquées (voir l'article Elasticemail sur l'Engagement rates et les Stale contacts).

Dans le même temps, Elasticemail maintient un système d'abonnement parrallèle auquel vous êtes soumis, et certains unsubs ou blocage ne remontent pas à vos outils (complaint et pruning par exemple).

Pour débloquer des adresses coté Elastic, utilisez le lien en bas de la page du lien ci-dessous (après connexion sur votre interface Elasticemail). Le formulaire enverra un lien de confirmation au propriétaire de l'adresse email mentionnée. Si le destinataire confirme son abonnement, son adresse est débloquée chez Elasticemail (pas sur vos outils) :

https://elasticemail.com/account/#/settings/unsubscribe

Pruning score (Elastic Email, avril 2017)

Depuis quelques temps Elastic Email propose un pruning score paramétrable : l'élagage de votre base de contacts par comptage des non-ouvertures (by score), ainsi qu'un réglage des non-ouvertures par jour (by day). Réticent au départ, je constate une amélioration de la régularité des vitesses d'envoi. C'est finalement une qualification permanente de vos contacts.

Ce score d'élagage permet de qualifier des stale contacts (contacts viciés, différents des unsubs, bounces, complaints ou spams) : si une adresse email n'a pas ouvert un certain nombre de vos emailings, alors il passe en statut stale, et sera évincé des envois.

Notez que le pruning score est automatiquement activé par Elastic si votre compte dépasse un certain nombre de plaintes (complaint rate). Cela est mentionné dans les Warning emails, si vous les recevez, c'est que vous élaguez vos contacts.

Paramètres accessibles en bas de la page du lien ci-dessous, après connexion à votre interface Elastic :

https://elasticemail.com/account/#/settings/sending


Quelques liens

Quelques liens concernant l'usage métier des outils emailings (bonnes pratiques, législation, délivrabilité, erreurs courantes...).

Attention : Certains sites spécialisés sont justement maintenus par des prestataires du domaine de l'emailing...

Réglementation :
Blacklistage, whitelistage et réputation :

Certaines blacklistes ne passent pas par des outils de déblacklistage comme MxToolBox :

Usages :
Blogs :

Exemples d'interfaces

Cliquez sur les images pour les afficher en grand format !

  screenshot app carto3 emc1