IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

Publipostage/ Emailing Mass sur Mac


Sujet :

AppleScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2017
    Messages : 10
    Par défaut Publipostage/ Emailing Mass sur Mac
    Hello,

    Je souhaiterai faire du publipostage via du Apple Script.

    L'idée serait de pouvoir envoyer des mails personnalisé à différentes personnes, comme par exemple :

    Bonjour (nom-prénom),
    Nous travaillons ensemble depuis le XX/XX/XXXX et avons généré un CA de XXXX euros.

    etc....................
    L'idée serait d'importer les données depuis un tableurs Number qui répertorie : Nom-prénom - date - CA - adresse mail.

    Savez vous comment je pourrais faire ça avec du AppleScript et Automator ?

  2. #2
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Bonjour,
    Rien de plus facile avec l'utilisation d'une boucle Repeat.
    N'ayant pas l'application Numbers, je ne sais pas extraire les données de ta liste (c'est possible compte tenu de la documentation !).
    Cependant le script ci-dessous te montre un exemple, en supposant que tu ai déjà lu les données de ton tableau Numbers.

    L'astuce, en Applescript, est d'utiliser des "records" : cela ressemble à une liste de valeurs, mais chaque valeur à un nom. Dans notre exemple, chaque record est composé de 5 valeurs: Nom, prénom, début, CA, Adresse.
    Attention, les noms de chaque valeur doivent respecter la syntaxe habituelle des variables (pas d'accent, donc prénom devient prenom) et surtout ne pas être des termes Applescript standard. Dans ton cas, la date de début ne peut s'appeler "date" car ce terme est déjà réservé. Je l'ai donc appelé "debut".

    Ensuite, j'ai construit une liste des records. Dans l'exemple ci-dessous, il n'y en a que 2, mais la liste peut contenir bien plus.
    Toutefois si la liste dans Numbers contient plusieurs milliers de lignes, il sera préférable de lire chaque ligne au fur et à mesure.

    Ensuite le script utilise la boucle "repeat" pour parcourir chaque record et créer le mail.
    Pour les tests, j'ai laissé l'instruction "send" en commentaire. Le test va donc créer des emails, mais sans les envoyer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    -- Lecture des données de Numbers, puis,  juste à titre d'exemple:
    set Ligne1 to {Nom:"Dupont", Prenom:"Jean", Debut:"01/06/2017", CA:10000, Adr:"toto@orange.fr"}
    set Ligne2 to {Nom:"Durand", Prenom:"Jacques", Debut:"31/12/2010", CA:24561, Adr:"Durand@orange.fr"}
    set Liste to {Ligne1, Ligne2} -- on défini la liste de tous les enregistrements
    
    
    repeat with UneLigne in Liste
        
        tell application "Mail"
    activate
            set Mon_Sujet to "Boutique xxxxx"
            set Mon_Content to "Bonjour " & (Nom of UneLigne) & " " & (Prenom of UneLigne) & "," & return
            set Mon_Content to (Mon_Content & "Nous travaillons ensemble depuis le " & (Debut of UneLigne) & " et avons généré un CA de " & (CA of UneLigne) as string) & " euros." & return
            set Mon_Content to Mon_Content & " Merci de votre confiance." & return & return
            set Mon_Content to Mon_Content & "Cordialement"
            set monMessage to make new outgoing message with properties {visible:true, subject:Mon_Sujet, content:Mon_Content}
            tell monMessage to  make new to recipientat end of to recipients with properties {address:Adr of UneLigne}
            
    -- send monMessage
        end tell
        
    end repeat
    Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2017
    Messages : 10
    Par défaut
    Merci pour ta réponse.

    Est ce que ça serait pas plus simple avec Excel ....


    Car là j'avoue être perdu dans le code ... Comment on fait une lecture de données ?

  4. #4
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Bonjour,
    Avec Excel, ce ne serait pas forcément plus simple ou plus compliqué, ... mais au moins je peux t'aider sur Excel.

    Je suppose que ton fichier Excel est ouvert, sur la bonne feuille.
    Cette feuille contient une ligne 1 d'entêtes et les données dans les lignes suivantes, sans lignes vides, donc les données de la ligne 2 à x.
    Enfin, sur chaque ligne, il y a 5 colonnes de données:
    - colonne A = Nom
    - colonne B = Prénom
    - colonne C = date début (une date enregistrée comme tel par Excel )
    - colonne D = un chiffre d'affaire, avec ou sans décimal. pour le formatage, j'ai limité au maximum à 999 999 999,99€ (!)
    - colonne E = une adresse email valide

    Le script ne fait pas de vérification de la validité des données (une date est une date valide, le CA est bien un nombre,...)

    L'astuce, lorsqu'on passe de Excel à Applescript réside dans le formatage des variables.
    Par exemple, un CA to 123 456.78€ dans Excel donne une variable numérique dans Applescript sous le format 1.2345678E5 (le E5 représente en fait "x 10 puissance 5"). Il faut donc penser à la formater, sinon ton client sera surpris de cette valeur de CA !
    Idem pour les dates, dans Applescript une date est au format dd/mmmmm/yyyy HH:MM:SS avec le mois en texte anglais (january, february,...) et les heures, minutes et secondes.
    Donc j'ai ajouté 2 sous-routines de conversion en string, l'un pour les nombres, l'autre pour les dates.
    Ces 2 routines peuvent être réutilisées par tous dans d'autre scripts.

    Enfin, j'ai finalement choisi de ne pas lire toutes les lignes Excel d'un coup, mais de les traiter au fur et à mesure.

    Voici le script, avec des commentaires afin que tu puisse progresser dans ta compréhension. Le but étant bien que tu puisses le modifier à tes besoins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    tell application "Microsoft Excel"
    activate-- je suppose que le fichier est ouvert sur la bonne feuille
        set DerLigne to count of rows of used range of active sheet-- je suppose que tu n'a pas de lignes vides
        repeat with I from 2 to DerLigne-- la liste commence en ligne 2: la première ligne contient les entêtes
            set nom to value of range ("A" & I) -- le nom est en colonne A
            set prenom to value of range ("B" & I) -- le prénom est en colonne B
            set Ndebut to value of range ("C" & I) -- la date est en colonne C
            tell me to set debut to Date_vers_String(Ndebut)
            set NCA to value of range ("D" & I) -- le CA est en colonne D
            tell me to set CA to Num_vers_String(NCA) -- converti en string et formaté en xxx xxx xxx,xx
            set Adr to value of range ("E" & I) -- l'adresse email est en colonne E
            
            tell application "Mail"
    activate
                set Mon_Sujet to "Boutique xxxxx"
                set Mon_Content to "Bonjour " & nom & " " & prenom & "," & return
                set Mon_Content to Mon_Content & "Nous travaillons ensemble depuis le " & debut & " et avons généré un CA de " & CA & " euros." & return
                set Mon_Content to Mon_Content & " Merci de votre confiance." & return & return
                set Mon_Content to Mon_Content & "Cordialement"
                set monMessage to make new outgoing message with properties {visible:true, subject:Mon_Sujet, content:Mon_Content}
                tell monMessage to make new to recipientat end of to recipients with properties {address:Adr}
    -- send monMessage 
            end tell
            
        end repeat -- passe à la ligne Excel suivante
        
    end tell -- fin du programme !!
    on Date_vers_String(LD) -- converti une date en dd/mm/yy
        set {year:y, month:m, day:d} to LD
        return (text -1 thru -2 of ("00" & d)) & "/" & (text -1 thru -2 of ("00" & m * 1)) & "/" & (text -1 thru -4 of ("0000" & y))
    end Date_vers_String
    
    
    on Num_vers_String(N) -- converti un nombre en format avec séparateur de milliers, avec 2 decimales
        set SepM to " " -- défini le séparateur de millier
        set SepD to "," -- défini le séparateur décimal
        set Deci to ((N mod 1) * 100) as integer
        set SDeci to text -1 thru -2 of ("00" & Deci)
        set Ncent to (N mod 1000) as integer
        set N to ((N - Ncent) / 1000) as integer
        set Nmille to N mod 1000
        set N to ((N - Nmille) / 1000) as integer
        set Nmillion to N mod 1000
        set S to ""
        if Nmillion is not 0 then
            set S to (Nmillion as string) & SepM & (text -1 thru -3 of ("000" & Nmille)) & SepM & (text -1 thru -3 of ("000" & Ncent)) & SepD & SDeci
        else if Nmille is not 0 then
            set S to (Nmille as string) & SepM & (text -1 thru -3 of ("000" & Ncent)) & SepD & SDeci
        else if Ncent is not 0 then
            set S to (Ncent as string) & SepD & SDeci
        else
            set S to "0" & SepD & SDeci
        end if
        return S
    end Num_vers_String

    Comme précédemment, j'ai mis le "send" en commentaire pour ne pas envoyer les mails lors du test.
    Cordialement

  5. #5
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2017
    Messages : 10
    Par défaut
    Parfait !
    C'est top ça marche du tonnerre !


    Dernière question, est ce que tu penses qu'il est possible d'intégrer une image dans mon mail comme par exemple le logo de l'entreprise ?

  6. #6
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Citation Envoyé par speedshark78 Voir le message
    Est ce que tu penses qu'il est possible d'intégrer une image dans mon mail comme par exemple le logo de l'entreprise ?
    C'est techniquement possible, mais c'est bien plus complexe car Mail est très limité dans son support de mise en page html.
    En fait le plus simple serait que tu utilises la fonction Modèle qui permet de créer un email standard qui utiliserait un modèle existant dans un format html prédéfini.

    Apple, en standard ne fourni que certains modèles (annonces, photos, anniversaires,...) mais n'explique pas, pour l'utilisateur final, comment en créer un nouveau. En effet la création suppose une maîtrise du langage html qui est réservé aux programmeurs.

    Par contre, tu peux ajouter une pièce jointe à un email par script, mais cette pièce jointe (ton logo) sera parfois affichée par ton client comme un icône d'image , de fichier ou comme le logo lui-même, selon le client de messagerie de ton client.... pas terrible !

    Je m'étais penché sur les modèles Mail (juste pour vérifier que j'avais compris le principe !), j'avais fait un programme qui permettait de définir un modèle html très simple avec une image en fond et un texte libre à taper au dessus. Le programme créait un modèle Mail à partir du fichier photo sélectionné et effectuait l'ajout dans la bibliothèque (là aussi non prévu en standard par Apple pour l'utilisateur final).
    Le html était très simpliste, mais le programme gérait le modèle correctement. Si cela intéresse un expert html, je peux le retrouver et le diffuser...

    Cordialement

  7. #7
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2017
    Messages : 10
    Par défaut
    j'ai trouvé une solution :

    set theAttachmentFile to "Macintosh HD:Users:bob:desktop:picture.png" -- the attachment path
    tell monMessage to make new attachment with properties {file name:theAttachmentFile as alias}

  8. #8
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    C'est effectivement l'ajout d'une pièce jointe auquel je faisais référence dans mon mail précédent.
    Selon l'application mail de tes clients, cette image sera affichée sous forme d'icône de fichier, ou d'image.
    Sur le client Mail, par défaut les images sont affichées dans le corps du mail.
    Mais sur les clients Outlook (Mac ou Windows), par défaut, seul l'icône du fichier jpg sera affiché, mais pas ton logo.

    Ceci étant, si tu décides de continuer dans cette direction, sache que ta seconde instruction "make new attachement with properties {xxx}" peut être complétée afin de définir où insérer cette pièce jointe.
    Par exemple, si tu ajoutes sur la même ligne " after the last paragraph" cela ajoutera l'image à la fin.
    Dans ton cas, comme c'est un logo, il faudra sans doute utiliser "before the first paragraph", afin qu'elle précède ton texte.


    Cordialement

Discussions similaires

  1. oracle sur mac os 10.4.2
    Par bonobo974 dans le forum Oracle
    Réponses: 6
    Dernier message: 05/11/2005, 17h55
  2. recup de données sur MAC
    Par sarastro dans le forum Apple
    Réponses: 5
    Dernier message: 12/05/2005, 15h17
  3. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  4. [FLASH MX 2004] Ouvrir un document .fla sur Mac
    Par tahiti bob dans le forum Flash
    Réponses: 2
    Dernier message: 12/05/2004, 17h53
  5. [MX] autorun sur MAC
    Par tahiti bob dans le forum Flash
    Réponses: 10
    Dernier message: 07/02/2004, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo