Révolution Informatique Rich Mail Merge Manuel utilisateur
Révolution Informatique – Rich Mail Merge – guide développeur
Révolution Informatique
Pensez Libre !
RICH MAIL MERGE v2.0
Guide développeur
Les livres blancs 2010 - Patrick Oliviero page 1/27
Révolution Informatique – Rich Mail Merge – guide développeur
BUT
Le but de ce document est de vous faire découvrir un moyen simple pour collecter des informations utilisateurs dans une feuille de calcul à partir d'un formulaire Google. À partir de ces données nous enverrons des courriels personnalisés.
Le code de ce script Google Apps est dérivé du tutorial 'Simple Mail Merge' et en reprends la majorité. Les modifications apportées en permettent une réelle exploitation professionnelle :
•
Le formulaire est publié sur un site web
(Google site), ce qui permet un accès facile pour les internautes.
•
Le modèle est également une page Google site afin de générer des messages électroniques au format HTML.
Table des matières
1 Création du modèle..............................................................................................................................................3
Les variables de fusion ......................................................................................................................................3
Les champs de fusion..........................................................................................................................................3
Mode d'emploi....................................................................................................................................................3
2 Préparation du formulaire.....................................................................................................................................6
3 Feuille de calcul..................................................................................................................................................10
Modifications....................................................................................................................................................10
Intégration du script à votre feuille de calcul...................................................................................................12
4 Intégration du formulaire sur votre site..............................................................................................................14
5 Test......................................................................................................................................................................17
6 Déclencheurs possibles.......................................................................................................................................19
Cas particulier des champs calculés.................................................................................................................21
7 Analyse du code..................................................................................................................................................23
8 Conclusion..........................................................................................................................................................27
Avis aux contributeurs .....................................................................................................................................27
Les livres blancs 2010 - Patrick Oliviero page 2/27
Révolution Informatique – Rich Mail Merge – guide développeur
1 Création du modèle
Ce modèle est le corps d'une page Google sites dans laquelle sont inclus des variables et/ou des champs de fusion.
Les variables de fusion
Elles sont destinées à être remplacées par les valeurs correspondantes dans tous les e-mails qui seront envoyés. Les variables disponibles dans cette version 2.0 sont :
•
%{«aaaa»} ou %{«yyyy»} année sur 4 digits
•
%{«aa»} ou %{«yy»} année sur 2 digits
•
%{«jj»} ou %{«dd»} jour sur 2 digits
•
%{«jjjjj»} ou %{«ddddd»} jour de la semaine en lettres
•
%{«mm»} mois sur 2 digits
•
%{«mmmmm»} mois en lettres
Ce mécanisme est nouveau dans cette version, il est facilement extensible à de nouvelles variables.
Les champs de fusion
Ils sont destinés à être remplacés par les valeurs correspondantes dans chacun des e-mails envoyés. Leur noms doivent correspondre aux noms de champs utilisés dans la feuille de calcul.
NB – Vous pouvez utiliser des champs dans les liens hypertexte de votre modèle. A l'enregistrement du modèle google sites remplace certains caractères spéciaux. Laissez les tels quels le script gère automatiquement ce remplacement.
Mode d'emploi
Il vous faut créer une nouvelle page sur votre Google site. Choisissez un modèle le plus simple possible pour commencer. Vous pourrez enregistrer votre nouvelle page comme modèle par la suite.
Les livres blancs 2010 - Patrick Oliviero page 3/27
Révolution Informatique – Rich Mail Merge – guide développeur
Modifiez ensuite la page créée à votre convenance en respectant néanmoins les règles de composition ciaprès. Elles sont assez strictes à cause de contraintes techniques liées à google script :
•
Seul le code du corps de la page peut être lu. Le script ne tiendra donc pas compte de la charte graphique du site :
•
Pas d'entête ni pied de page
•
Pas de barre latérale
•
Pas de mise en page multicolonnes
•
Pas de thème...
•
Pour faire bref cette page fera souvent appel à du code HTML écrit à la main. Si vous ne le maîtrisez pas, utilisez un éditeur externe et collez le code obtenu dans l'éditeur Html de google site.
•
Le document envoyé ne sera pas obligatoirement connecté à votre compte lors de sa lecture! Il faut être vigilant sur plusieurs autres points :
•
Les liens aux ancres de la page doivent être relatifs (l'éditeur les modifie en absolus si vous essayez de les modifier).
•
Toutes les images utilisées doivent être publiées (j'ai systématiquement utilisé des images picasa publiques dans cet exemple)
•
Les Google Gadgets ne sont généralement pas supportés....
Les livres blancs 2010 - Patrick Oliviero page 4/27
Révolution Informatique – Rich Mail Merge – guide développeur
Exemple de modèle terminé :
Les livres blancs 2010 - Patrick Oliviero page 5/27
Révolution Informatique – Rich Mail Merge – guide développeur
2 Préparation du formulaire
La première chose à faire est de vous connecter à votre compte google docs pour créer un nouveau formulaire...
De paramétrer les champs dont nous aurons besoin :
Nouveauté 2.0: Les intitulés de questions ne doivent plus obligatoirement correspondre aux noms de champs du modèle.
Le nom
Les livres blancs 2010 - Patrick Oliviero page 6/27
Révolution Informatique – Rich Mail Merge – guide développeur
Puis l'email de nos contacts.
Ajoutez, de la même façon :
Un champ numérique (pour test des valeurs arrondies) ex : « Prix unitaire »
Un champ destiné à tester la fusion dans les hyperliens, ex : Choisissez votre page d'accueil ; liste de choix;valeurs : Home, Contacts,...
NB : les valeurs doivent correspondre pour ce test à des nom de pages existantes de votre site car le lien hypertexte sera du type www.nomdomaine.fr/${« page »}
Les livres blancs 2010 - Patrick Oliviero page 7/27
Révolution Informatique – Rich Mail Merge – guide développeur
Et enfin, n'oubliez pas de rendre ce formulaire public en décochant la case qui oblige les utilisateurs à se connecter :
Vous pouvez également choisir un thème en accord avec la charte graphique de votre site web :
Enfin cliquez sur le lien en bas de page pour vérifier votre formulaire publié :
Les livres blancs 2010 - Patrick Oliviero page 8/27
Révolution Informatique – Rich Mail Merge – guide développeur
Validation des données : Les formulaires ne permettent malheureusement pas de positionner des règles de validation de données. Il est possible de poser des contraintes dans les cellules de la feuille de calcul, elles seront marquées comme invalides mais aucun message ne remonte vers l'utilisateur.
Les livres blancs 2010 - Patrick Oliviero page 9/27
Révolution Informatique – Rich Mail Merge – guide développeur
3 Feuille de calcul
Nous devons ensuite nous intéresser à la feuille de calcul générée par ce formulaire.
Modifications
Elle présente en ligne 1 les libellés que nous avons utilisés dans le formulaire. Nous devons la modifier afin de la faire correspondre à nos besoins.
Ci-dessus la feuille terminée, quels sont les ajouts :
Ligne 1 :
Version du script
Elle sert à assurer la compatibilité ascendante avec la version 1. Elle doit obligatoirement se trouver dans deux cellules adjacentes ( K-L rouges dans la copie d'écran) la première contient le mot clé version , la seconde le numéro de version v2.0 . Dans le cas où ces données ne sont pas trouvées exactement sous cette forme, la feuille est considérée comme étant en version 1. Dans ce cas le script considère que les données des contacts commencent sur la ligne 2.
Si version v2.0 est trouvé la feuille doit comporter d'autres informations : obligatoires - noms des paramètres ils doivent être Domain Name, Site Name, Page Name, Email Subject et Language il serviront à indiquer le modèle du mailing et la langue (pour traduction automatique des variables) optionnelles
Si vous utilisez des champs calculés (arrondi des valeurs numériques...) vous pouvez ajouter ici leurs descriptions (ex colonne M nombre arrondi). Ces descriptions sont purement indicatives et ne sont pas exploitées par le script.
Ligne 2 :
Elle contient 2 types d'informations :
Noms des champs de fusions associés
Ils doivent correspondre aux noms de champs utilisés dans le modèle pour les informations du formulaire et les colonnes calculées.
Pour des raisons techniques, il doivent être normalisés par le script :
→
Les caractères non alphanumériques et les espaces sont supprimés % : ./!§ les caractères accentués sont remplacés par le caractère générique correspondant éèà eea
Exemples :
→ les caractères sont forcés en minuscule sauf la première lettre des mot (excepté le premier)
→
→
21haut haut mot 2 passe mot2Passe
% de remise % deRemise
Mon conseil est de choisir des noms de champs normalisés dès la conception (dans feuille de calcul et le modèle) afin d'éviter toute erreur d'interprétation. (ce qui n'est pas fait dans la copie d'écran ci-dessus pour exemple).
Valeurs des paramètres ex : monDomaine , monSite.fr, maPage qui doivent, bien sûr, pointer vers la page contenant le modèle à fusionner
Les livres blancs 2010 - Patrick Oliviero page 10/27
Révolution Informatique – Rich Mail Merge – guide développeur
Le sujet de l'email
Le code langue. Il est utilisé, pour la traduction, par les service de traduction de google, du jour et du mois en lettre. Il doit donc être l'un des codes supportés.
Language
AFRIKAANS
ALBANIAN
ARABIC
BELARUSIAN
BULGARIAN
CATALAN
CHINESE
CHINESE_SIMPLIFIED
CHINESE_TRADITIONAL
CROATIAN
CZECH
DANISH
DUTCH
ENGLISH
ESTONIAN
FILIPINO
FINNISH
FRENCH
GALICIAN
GERMAN
GREEK
HAITIAN_CREOLE
HEBREW
HINDI
HUNGARIAN
ICELANDIC
INDONESIAN
IRISH en et tl fi fr hr cs da nl iw hi hu is gl de el ht id ga ar be bg ca
Code
Language af sq
ITALIAN
JAPANESE
KOREAN
LATVIAN
LITHUANIAN
MACEDONIAN zh MALAY zh-CN MALTESE zh-TW NORWEGIAN
PERSIAN
POLISH
PORTUGUESE
PORTUGUESE_PORTUGAL
ROMANIAN
RUSSIAN
SERBIAN
SLOVAK
SLOVENIAN
SPANISH
SWAHILI
SWEDISH
TAGALOG
THAI
TURKISH
UKRAINIAN
VIETNAMESE
WELSH
YIDDISH ro ru sr sk sl fa pl pt pt-PT
Code
it ja ko lv lt mk ms mt no th tr uk vi es sw sv tl cy yi
Les livres blancs 2010 - Patrick Oliviero page 11/27
Révolution Informatique – Rich Mail Merge – guide développeur
Intégration du script à votre feuille de calcul
La version 2.0 de mon script est actuellement en étape de validation pour la publication à la bibliothèque.
Lorsqu'il sera validé la procédure à suivre sera la suivante :
À partir de votre feuille de calcul allez dans l'option de menu Outils>Scripts>Insérer...
Pour arriver à l'écran ci-dessous. Faite une recherche de « Rich mail » puis cliquez sur installer...
Les livres blancs 2010 - Patrick Oliviero page 12/27
Révolution Informatique – Rich Mail Merge – guide développeur
Dans l'attente de la validation de Google il faut en passer par l'éditeur de script. Supprimez la fonction par défaut myFunction() proposée par éditeur.
Puis collez le code de notre script que vous trouverez sur Google Code : http://code.google.com/p/rich-mail-merge/downloads/detail?name=RMM2.0.txt&can=2&q =
Votre script est alors prêt pour l'exécution. Il ne reste plus qu'à alimenter notre feuille de calcul à partir d'une page web...
Les livres blancs 2010 - Patrick Oliviero page 13/27
Révolution Informatique – Rich Mail Merge – guide développeur
4 Intégration du formulaire sur votre site
Créez une nouvelle page et insérez un formulaire :
Choisissez votre formulaire
Les livres blancs 2010 - Patrick Oliviero page 14/27
Révolution Informatique – Rich Mail Merge – guide développeur
Précisez en les paramètres...
et enregistrez les modifications.
Les livres blancs 2010 - Patrick Oliviero page 15/27
C'est terminé !
Révolution Informatique – Rich Mail Merge – guide développeur
Utilisez cette page pour saisir une ou deux adresses email.
Attention : ne soyez pas trop gourmand pour les premiers tests, à chaque tentative, un courriel sera envoyé à chacune des adresses contenues dans votre feuille de calcul. Vous devrez certainement faire de multiples tests avant d'arriver au résultat escompté.
N'oubliez pas que Google impose des quotas en fonction de votre type de compte.
Les livres blancs 2010 - Patrick Oliviero page 16/27
Révolution Informatique – Rich Mail Merge – guide développeur
5 Test
Pour tester notre script nous allons maintenant le lancer manuellement. Retournez dans votre feuille de calcul, puis lancez Outils>Scripts>Gérer choisissez la fonction sendEmails puis cliquez sur Run...
Lors du premier lancement d'un script Google vous demande deux autorisations. Validez, puis relancez le script.
Les livres blancs 2010 - Patrick Oliviero page 17/27
Révolution Informatique – Rich Mail Merge – guide développeur
Vérifiez vos boites de réception... vous devriez y voir vos courriels.
Les livres blancs 2010 - Patrick Oliviero page 18/27
Révolution Informatique – Rich Mail Merge – guide développeur
6 Déclencheurs possibles
Hormis la méthode manuelle que nous venons de voir, il est possible de lancer notre fonction de deux autres manières :
•
Sur un événement survenant dans la feuille de calcul (From spreadsheet)
Trois événements sont gérés ici Ouverture (on open), Modification(on edit), Enregistrement d'un formulaire (on form submit).
Notre script ne se prête pas à ce type de déclenchement puisque il envoie des courriels à la liste de contacts. On pourrait imaginer un déclenchement 'on form submit' en modifiant légèrement notre script pour n'envoyer un courrier électronique au seul dernier contact.
Ex :
18 var dataRange = dataSheet .
getRange ( dataSheet .
getLastRows (), 1 , dataSheet .
getLastRow (), dataSheet .
getLastColumn ());
Les livres blancs 2010 - Patrick Oliviero page 19/27
Révolution Informatique – Rich Mail Merge – guide développeur
•
Sur un timer (Time driven)
De nombreuses combinaisons sont ici possibles :
Minutes : toutes les 1/5/10/15/30 minutes
Heures : toutes les 1/2/4/8/12 heures
Jours : par tranche d'une heure (8 à 9, 9 à 10... toutes les heures sont possibles)
Semaine : Jours (Lundi, Mardi...) puis tranches d'une heure.
La documentation des évènements indique que d'autres fréquences sont possibles : annuelle, mensuelle et jour du mois mais celles-ci ne sont pas implémentées dans l'interface.
Google précise que ces déclencheurs sont encore instable pour le moment.
Les livres blancs 2010 - Patrick Oliviero page 20/27
Révolution Informatique – Rich Mail Merge – guide développeur
•
Les déclencheurs peuvent s'ajouter les uns aux autres :
Dans cet exemple, l'envoi se fera à chaque validation du formulaire et chaque lundi de 2 à 3 heures et chaque Jeudi de 22 à 23 heures.
Cas particulier des champs calculés
La gestion des champs calculés nécessite 3 manipulations complémentaires :
1.
Après avoir inséré la première ligne de données, retournez dans votre feuille de calcul pour y ajouter les formules. Ex : sur la copie d'écran du paragraphe 3 la formule est dans la cellule M3 contient la formule =Round(E3;2)
2.
Cette formule doit ensuite être répliquée à chaque insertion d'un nouvel enregistrement. La fonction rangeCopy() est prévue, à cet effet, dans le script. Ajoutez un déclencheur :
Run rangeCopy() From Spreadsheet On form submit
3.
A ce jour vous devez modifier le code de la fonction pour indiquer la/les cellules qui doivent être répliquées.
function rangeCopy () {
// based on (basé sur) google apps script / spreadsheet services documentation
// http://code.google.com/intl/fr/googleapps/appsscript/service_spreadsheet.html
// Copy a range of cells.
Les livres blancs 2010 - Patrick Oliviero page 21/27
Révolution Informatique – Rich Mail Merge – guide développeur
// Should be used by a 'on update' trigger to add content regardless of the form
// By example for adding formatted fields
// Copie une sélection de cellules.
// Pour utilisation par un déclencheur on update pour ajouter du contenu indépendamment du formulaire
// Exemples d'utilisation ajout de champs formatés var ss = SpreadsheetApp .
getActiveSpreadsheet (); var dataSheet = ss .
getSheets ()[ 0 ];
var rangeToCopy = dataSheet .
getRange ( "M2" );
La ligne ci-dessus est la source elle contient la formule à copier. Si vous avez plusieurs champs calculés le plus simple est de les mettre dans des colonnes consécutives et d'indiquer la zone à copier. Ex dataSheet.getRange("M2:V10");
var targetRow = dataSheet .
getLastRow ();
var target = dataSheet .
getRange ( "M" +( targetRow + 1 ));
Il faut également modifier la zone cible : ex dataSheet.getRange("M"+(targetRow+1)+":V"+
(targetRow+1));
rangeToCopy .
copyTo ( target ); return 1
}
NB : Dans une prochaine version un mécanisme sera prévu pour éliminer cette modification de code.
Les livres blancs 2010 - Patrick Oliviero page 22/27
Révolution Informatique – Rich Mail Merge – guide développeur
7 Analyse du code
Je ne reprendrais pas ici intégralement le tutorial de Google que vous pouvez retrouver à l'adresse http://code.google.com/intl/fr-FR/googleapps/appsscript/articles/mail_merge.html
mais je m'attacherais aux améliorations apportées par notre script Rich Mail Merge.
La modification de la fonction sendEmails porte sur les lignes suivantes :
26 var rmmVersion = getRmmVersion ( dataSheet ); lit la version du script attendue par la feuille de calcul. Elle sera utilisée dans la suite du script pour assurer une compatibilité ascendante
Nous préparons ensuite la lecture du modèle selon la version :
En version1.0 les paramètres sont en dur (les utilisateur devaient donc modifier ce code) et les données commencent sur la ligne 2.
En version 2.0 les paramètres sont lus dans la feuille de calcul, les données commencent sur la ligne 3. if ( rmmVersion == "v1.0" ) {
//deprecated version 1.0 headers are on the first row
// version 1.0 dépréciée les entêtes sont sur la première ligne var domainName = 'revolution-informatique.fr' ; // uddate with yourDomain.com - mettre à jour avec votreDommaine.fr
var siteName = 'revolution-informatique-script' ; // update with yourSite.com - mettre à jour avec votreSite.fr
var pageName = '/newsletters/n201102' ; // update with yourPage name - mettre à jour avec votre page var emailSubject = "Lettre information Révolution Informatique" ; //update with your Subject - mettre à jour avec votre sujet var language = "fr" //update with your language code - mettre à jour avec votre code langage
// contacts list starts at the 2nd row
// la liste des contacts commence sur la 2eme ligne var dataRange = dataSheet .
getRange ( 2 , 1 , dataSheet .
getLastRow (), dataSheet .
getLastColumn ());
} else {
// version 2.0 - 2 rows for headers
// on the 1st row are headers inherited from the form, versionning and parameters headers
// on the 2nd are fiels names (whitch are now independant from colums names) & parameters values
// version 2.0 - 2 lignes d'entête
// La 1ere ligne contient les noms de colonnes hérités du formulaire, le n° de version et les noms de paramètres
Les livres blancs 2010 - Patrick Oliviero page 23/27
Révolution Informatique – Rich Mail Merge – guide développeur
// la 2eme ligne contient les nom de champs (maintenant indépendants des noms de colonnes) et les valeurs des paramètres
// Read parameters from dataSheet
// lecture des paramètres à partir de la feuille de calcul var dataRange = dataSheet .
getRange ( 2 , 1 , 2 , dataSheet .
getLastColumn ());
// Create one JavaScript object from the row of data
// Crée un objet Javascript à partir des données de la ligne objects = getRowsData ( dataSheet , dataRange ); var data = objects [ 0 ]; var domainName = data [ "domainName" ]; var siteName = data [ "siteName" ]; var pageName = data [ "pageName" ]; var emailSubject = data [ "emailSubject" ]; var language = data [ "language" ];
// contacts list starts at the 3rd row
// la liste des contacts commence à la 3eme ligne var dataRange = dataSheet .
getRange ( 3 , 1 , dataSheet .
getLastRow (), dataSheet .
getLastColumn ());
}
N ous exécutons ensuite la fonction readPage qui lit le modèle
24 var emailTemplate = readPage ( domainName , siteName , pageName );
Cette fonction commence par instancier un objet site à partir du nom de domaine et du nom du site. Puis instancie la page correspondant au modèle, recupère le code HTML (du corps seulement !), corrige les caractères spéciaux dans les hyperliens et renvoi le texte corrigé.
function readPage ( domainName , siteName , pageName ) {
// based on (basé sur) google apps script / site services documentation http://code.google.com/intl/fr-FR/googleapps/appsscript/service_sites.html
// return the HTML page content of domainName,siteName,pageName
// renvoie le code HTML du contenu de la page domainName,siteName,pageName (nom de domaine, nom de site, nom de page) var site = SitesApp .
getSite ( domainName , siteName ) var page = site .
getChildByName ( pageName ); var content = page .
getHtmlContent (); content = hyperlinksCorrect ( content ) ; // corrige les hyperliens - hyperlinks correction return content ;
}
Les livres blancs 2010 - Patrick Oliviero page 24/27
Révolution Informatique – Rich Mail Merge – guide développeur
Le script effectue ensuite le remplacement des variables par leurs valeurs :
//met à jour les variables emailTemplate = fillInTemplateVariables ( emailTemplate , language );
// Remplace les variables u modèle par les valeurs correspondantes
// Paramètres :
// - template: chaine contenant les variables, ex %{vName"}
// variables supportées :
// %{"jj"}, %{"mm"}, %{"aa"} or %{"yy"} jour, mois, année 2 digits
// %{"ddddd"} or %{"jjjjj"} jour de la semaine
// %{"mmmmm"} mois en lettre
// %{"aaaa"} or %{"yyyy"} année 4 digits
// - language: code langage pour la traduction des jours et mois function fillInTemplateVariables ( template , language ) { var message = template ; var d = new Date ();
// year 4 digits année var reg = new RegExp ( /\%\{\"aaaa\"\}|\%\{\"yyyy\"\}/g ); message = message .
replace ( reg , d .
getFullYear ());
// year 2 digits année var reg = new RegExp ( /\%\{\"aa\%\{\"|yy\"\}\"\}/g ); message = message .
replace ( reg , d .
getFullYear ().
toString ().
slice (2 ));
// month 2 digits mois var reg = new RegExp ( /\%\{\"mm\"\}/g ); message = message .
replace ( reg , d .
getMonth ());
// day 2 digits jour var reg = new RegExp ( /\%\{\"jj\"\}|\%\{\"dd\"\}/g ); message = message .
replace ( reg , d .
getDate ());
// Day of the week - jour de la semaine var reg = new RegExp ( /\%\{\"jjjjj\"\}|\%\{\"ddddd\"\}/g ); var ddddd = Utilities .
formatDate ( d , "GMT" , "EEEEE" ); ddddd = LanguageApp .
translate ( ddddd , "en" , language ); message = message .
replace ( reg , ddddd );
// month in letters - mois en lettres var reg = new RegExp ( /\%\{\"mmmmm\"\}/g ); var mmmmm = Utilities .
formatDate ( d , "GMT" , "MMMMM" ); mmmmm = LanguageApp .
translate ( mmmmm , "en" , language ); message = message .
replace ( reg , mmmmm );
Les livres blancs 2010 - Patrick Oliviero page 25/27
Révolution Informatique – Rich Mail Merge – guide développeur return message ;
}
Les variables étant remplacées le document est maintenant près pour la fusion.
Un dernier point. Attention à la syntaxe de la ligne :
MailApp .
sendEmail ( rowData .
email , emailSubject , "" , { htmlBody : emailText });
Le corps HTML du courriel est passé comme quatrième argument, contrairement à un format texte qui est attendu en troisième position.
Les livres blancs 2010 - Patrick Oliviero page 26/27
Révolution Informatique – Rich Mail Merge – guide développeur
8 Conclusion
Nous pouvons, enfin, noter quelques subtiles différences entre un déploiement de cet exemple sur un compte Google standard et un compte Google Apps :
–
Un compte Google Apps ne permet pas de publier un script ou un modèle de feuille de calcul dans la galerie Google. Ils resteront internes à votre domaine.
–
Certaines fonctions ne semblent pas réagir comme attendu. Ex : il m'a été impossible d'instancier directement un objet page avec la fonction getPageByUrl(url). Il semble d’ailleurs y avoir une erreur sur cette fonction dans la documentation de Google, les exemples donnés utilisent la fonction getSiteByUrl(url)
De nombreuses améliorations fonctionnelles et de qualité du code sont, bien sûr, toujours possibles.
Des versions plus complètes sont prévues dans les semaines qui viennent. Toutefois je n'ajouterais volontairement aucune interface utilisateur.
Ce script doit pouvoir continuer à fonctionner dans le cadre d'une automatisation complète et transparente.
Avis aux contributeurs
La bibliothèque de script de Google n'étant pas très conviviale, j'ai publié le code de ce script sur Google
Code :
http://code.google.com/p/rich-mail-merge/
J'aimerais essayer d'y fédérer toutes les évolutions que nous pouvons apporter à RMM, si vous faîtes des modifications que vous voulez faire partager à la communauté merci de me rejoindre ce projet.
Les livres blancs 2010 - Patrick Oliviero page 27/27

Public link updated
The public link to your chat has been updated.