Automatiser envoi mail journalier

digisi

Membre junior
26 Avril 2020
30
0
32
Bonjour à tous,

Je souhaitais savoir s'il était possible (règles mail, apple script, automator), de mettre en place un scénario d'envoi de mails.

Le schéma serait celui-ci :
  • Copier l'adresse depuis Excel ou Numbers et créer un nouveau mail
  • Copier le message depuis Word ou Pages et le coller dans ce mail
  • Envoyer le message
  • Limiter les envois à 50 par jour du lundi au vendredi
  • Identifier dans Excel ou Numbers les emails traités pour éviter les doublons au niveau des envois
J'espère être clair.

Du coup, je voulais savoir, selon vous quel serait le moyen de parvenir à cela.

Merci d'avance pour vos réponses.

Bon dimanche.
 

moderno31

Membre émérite
21 Avril 2011
721
59
Toulouse
Hello
C'est un outil d'emailling qu'il te faut. En mode bricolage cela me parait super compliqué.
Mailchimp, Sendinblue, sarbacane ...
Le client Mail tel qu'il est conçu n'est fait pour fonctionner que quand l'ordinateur est allumé et le client actif. Si tu n'as pas les 2, il n'y aura aucun envoi de mails.

En soit, automator peut t'aider, mais cela me parait très compliqué, voir incompatible avec certaines limites physiques.
L'autre problème c'est que tu te feras black-lister si tu ne prends pas un outil ou un domaine reconnu dont il est nécessaire de faire valider le domaine... Je peux te l'affirmer on a été confronté récemment à ce sujet.
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bonjour,

Hormis ce que te dit @moderno31 , te faire black-lister.

Tu peux programmer l'envoie de mail dans un applescript en récupérant tous les éléments dans un fichier Numbers.
Pour programmer l'ouverture de ce script, tu peux mettre un évènement dans le calendrier, ou une ouverture automatique dans du fichier au démarrage du mac, qui lui peut être programmer pour démarrer à un jour et une heure précise via préférences système-->économie d'énergie.

Exemple :fichier Numbers
Capture d’écran 2020-04-27 à 10.44.10.png

avec un exemple de script:
Bloc de code:
tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "E1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        repeat
            
            set celnom to "A" & leslignes as string -- initialise les variables de numéro de cellules des données
            set celprenom to "B" & leslignes as string
            set celmail to "C" & leslignes as string
            set celdate to "D" & leslignes as string
            set lenom to value of cell celnom -- recupère le nom
            if lenom = "fin" then -- vérifie si la derniere ligne
                exit repeat
            end if
            set leprenom to value of cell celprenom -- récupère le prenom
            set lemail to value of cell celmail -- récupère le mail
            set ladate to value of cell celdate -- récupère la date
            
            tell application "Mail"
                set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla -- prépare le contenu du mail
                
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
                
                
                tell newMessage
                    --Exemple de mise en forme du texte
                    --repeat with y from 0 to count of contenu
                    --set font of character (y) of content to "Helvetica Bold"
                    --end repeat
                    
                    --repeat with y from 5 to 7
                    --set font of word (y) of content to "Helvetica Bold"
                    --end repeat
                    
                    set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
                
                send newMessage
            end tell
            
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
end tell
 

digisi

Membre junior
26 Avril 2020
30
0
32
Bonjour,

Hormis ce que te dit @moderno31 , te faire black-lister.

Tu peux programmer l'envoie de mail dans un applescript en récupérant tous les éléments dans un fichier Numbers.
Pour programmer l'ouverture de ce script, tu peux mettre un évènement dans le calendrier, ou une ouverture automatique dans du fichier au démarrage du mac, qui lui peut être programmer pour démarrer à un jour et une heure précise via préférences système-->économie d'énergie.

Exemple :fichier Numbers
Voir la pièce jointe 169839
avec un exemple de script:
Bloc de code:
tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "E1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        repeat
           
            set celnom to "A" & leslignes as string -- initialise les variables de numéro de cellules des données
            set celprenom to "B" & leslignes as string
            set celmail to "C" & leslignes as string
            set celdate to "D" & leslignes as string
            set lenom to value of cell celnom -- recupère le nom
            if lenom = "fin" then -- vérifie si la derniere ligne
                exit repeat
            end if
            set leprenom to value of cell celprenom -- récupère le prenom
            set lemail to value of cell celmail -- récupère le mail
            set ladate to value of cell celdate -- récupère la date
           
            tell application "Mail"
                set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla -- prépare le contenu du mail
               
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
               
               
                tell newMessage
                    --Exemple de mise en forme du texte
                    --repeat with y from 0 to count of contenu
                    --set font of character (y) of content to "Helvetica Bold"
                    --end repeat
                   
                    --repeat with y from 5 to 7
                    --set font of word (y) of content to "Helvetica Bold"
                    --end repeat
                   
                    set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
               
                send newMessage
            end tell
           
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
end tell
Bonjour,

Merci pour ton retour.
En fait je ne passe pas par un système d'emailing, c'est une tâche que je fais manuellement, mais que je souhaite automatiser pour gagner du temps et me consacrer à des choses plus importantes.
J'ai testé le script et ca correspond a ce que je cherchais (merci).
Par contre, petite question, car je me rends compte que j'ai cherché à faire compliquer au lieu de simple.
Est ce qu'il est possible d'envoyer 1 mail mais à 50 contacts au lieu de l'inverse ? Et que les contacts soient en CCI ?
Autre question, si j'ai 250 mails sur le même tableau, est-ce que le script le lendemain en le lançant commencera à partir du contact 51 ? Ou il faut qu'il y ai 50 mails par tableau à chaque fois
Merci d'avance pour ta réponse.
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Mon script était juste un exemple...
Actuellement il envoie tant qu'il ne trouve pas un nom égal à "fin".
Pour toi il faudrait le modifier pour qu'il fasse une boucle de 50 en testant à chaque fois si ce n'est pas la fin du fichier.
De plus il faudrait également écrire dans une cellule de numbers une marque d'envoie (un X par exemple) afin que le lendemain il n'envoie que si cette valeur est absente.

Je n'ai pas compris ta remarque (Est ce qu'il est possible d'envoyer 1 mail mais à 50 contacts au lieu de l'inverse ?). Le script envoie bien un mail à chaque contact! en individuel ce n'est pas un mail groupé, Il individualise même chaque mail envoyé avec le nom et le prénom du contact. Donc pas besoin de mettre en CCI.

De plus j'ai commenté le script, afin que tu puisses suivre pas à pas le déroulement.
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Je t'ai fait quelques modifs pour adapter.
-Il stoppe si 50 messages envoyés
-Il met un "X" dans la cellule "Ex" de Numbers si envoi du message
-Il contrôle si "X" existe pour ne pas envoyer un nouveau message
-Il contrôle si fin de la liste (le nom cellule "Ax" est vide) pour arrêt.

Bloc de code:
tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "E1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        set nbmessage to 0
        repeat
            if nbmessage = 50 then exit repeat -- stop si 50 messages
            repeat
                set celtest to "E" & leslignes as string
                set letest to value of cell celtest -- controle si mail déja envoyé
                if letest = "X" then
                    set leslignes to leslignes + 1
                else
                    exit repeat
                end if
            end repeat
          
            set celnom to "A" & leslignes as string -- initialise les variables de numéro de cellules des données
            set celprenom to "B" & leslignes as string
            set celmail to "C" & leslignes as string
            set celdate to "D" & leslignes as string
          
            set lenom to value of cell celnom as string -- recupère le nom
            if lenom = "missing value" then -- vérifie si la derniere ligne
                exit repeat
            end if
          
          
            set leprenom to value of cell celprenom -- récupère le prenom
            set lemail to value of cell celmail -- récupère le mail
            set ladate to value of cell celdate -- récupère la date
          
            tell application "Mail"
                set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla -- prépare le contenu du mail
              
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
              
              
                tell newMessage
                    --Exemple de mise en forme du texte
                    --repeat with y from 0 to count of contenu
                    --set font of character (y) of content to "Helvetica Bold"
                    --end repeat
                  
                    --repeat with y from 5 to 7
                    --set font of word (y) of content to "Helvetica Bold"
                    --end repeat
                  
                    --set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    --make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
              
                send newMessage
                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
            end tell
            tell application "Numbers"
                tell table 1 of sheet 1 of document "liste.numbers"
                    set value of cell celtest to "X" -- renseigne numbers mail envoyé
                end tell
            end tell
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
end tell
 
Dernière édition:

digisi

Membre junior
26 Avril 2020
30
0
32
Je t'ai fait quelques modifs pour adapter.
-Il stoppe si 50 messages envoyés
-Il met un "X" dans la cellule "Ex" de Numbers si envoi du message
-Il contrôle si "X" existe pour ne pas envoyer un nouveau message
-Il contrôle si fin de la liste (le nom cellule "Ax" est vide) pour arrêt.

Bloc de code:
tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "E1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        set nbmessage to 0
        repeat
            if nbmessage = 50 then exit repeat -- stop si 50 messages
            repeat
                set celtest to "E" & leslignes as string
                set letest to value of cell celtest -- controle si mail déja envoyé
                if letest = "X" then
                    set leslignes to leslignes + 1
                else
                    exit repeat
                end if
            end repeat
         
            set celnom to "A" & leslignes as string -- initialise les variables de numéro de cellules des données
            set celprenom to "B" & leslignes as string
            set celmail to "C" & leslignes as string
            set celdate to "D" & leslignes as string
         
            set lenom to value of cell celnom as string -- recupère le nom
            if lenom = "missing value" then -- vérifie si la derniere ligne
                exit repeat
            end if
         
         
            set leprenom to value of cell celprenom -- récupère le prenom
            set lemail to value of cell celmail -- récupère le mail
            set ladate to value of cell celdate -- récupère la date
         
            tell application "Mail"
                set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla -- prépare le contenu du mail
             
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
             
             
                tell newMessage
                    --Exemple de mise en forme du texte
                    --repeat with y from 0 to count of contenu
                    --set font of character (y) of content to "Helvetica Bold"
                    --end repeat
                 
                    --repeat with y from 5 to 7
                    --set font of word (y) of content to "Helvetica Bold"
                    --end repeat
                 
                    --set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    --make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
             
                send newMessage
                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
            end tell
            tell application "Numbers"
                tell table 1 of sheet 1 of document "liste.numbers"
                    set value of cell celtest to "X" -- renseigne numbers mail envoyé
                end tell
            end tell
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
end tell
Merci beaucoup pour ton aide, j'ai tenté de tester le nouveau script et bizarrement j'ai un message d'erreur : error "Erreur dans Numbers : Il est impossible d’obtenir document \"liste.numbers\"." number -1728 from document "liste.numbers"
Pourtant le fichier liste.numbers est bien créé.
Ce matin lors du premiere essai avec l'autre script je n'ai pas eu cette problématique.
Merci encore !
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
C’est le même script, j’ai juste ajouté quelques lignes.
Tu as bien un doc Numbers ouvert avec les mêmes nom de fichier et de feuille?

Quand il y a l’erreur, il y a t’il un ligne surligné dans le script ?
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Je suppose que avec ton fichier excel ouvert avec les bons noms de fichier et de feuille ça fonctionne.

Si oui, il faudra me dire ou ce trouve ce fichier sur ton ordi (le chemin) pour que le script l'ouvre au départ.
 

moderno31

Membre émérite
21 Avril 2011
721
59
Toulouse
@zeltron54 : hey bien, c'est super pour @digisi. Cela va le dépanner. Et j'ai appris des choses au passage
 

digisi

Membre junior
26 Avril 2020
30
0
32
C’est le même script, j’ai juste ajouté quelques lignes.
Tu as bien un doc Numbers ouvert avec les mêmes nom de fichier et de feuille?

Quand il y a l’erreur, il y a t’il un ligne surligné dans le script ?
Tu m'as devancé pour la réponse.
Effectivement Numbers était ouvert mais pas le document.
Par contre je rencontre une autre erreur au niveau de mail mac : Erreur : Vous n’avez spécifié aucun destinataire.
Pourtant le doc est ouvert ainsi que mail mac.
Pour le chemin d'accès /Users/****/Documents/Script Mail
Question utilisation, admettons que je lance le script le lundi il envoie 50 mails, le mardi je le lance il continue sur le même fichier mais ou il n'y a pas de X (a partir de la ligne 51 ?) ?
Capture d’écran 2020-04-27 à 22.37.46.png Capture d’écran 2020-04-27 à 22.40.49.png
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bonjour,
Pour l'erreur d'absence de destinataire, mea culpa, j'avais désactivé ces lignes pour mes essais !
Pour le chemin , du fichier Numbers, j'ai ajouté son ouverture en début du script avec pour chemin: le fichier "liste.numbers" dans un dossier "script mail" dans "documents"
Macintosh HD:Users:****:documents:script mail:liste.numbers

J'ai également ajouter l'enregistrement du fichier numbers en fin, et quitter numbers.
Lorsque tout sera comme tu le souhaites, il faudra enregistrer ce script au format application pour son lancement auto.

Pour le contenu du mail, tu as vu que tu peux modifier le début dans la ligne de code qui est ensuite suivie du contenu de la cellule Numbers "E1".
Bloc de code:
set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla
Bloc de code:
tell application "Finder"
    set chemin to ((path to home folder) & "documents:script mail:liste.numbers") as string
    open chemin
    activate
end tell

tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "E1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        set nbmessage to 0
      
        display dialog "ok"
        repeat
            if nbmessage = 50 then exit repeat -- stop si 50 messages
            repeat
                set celtest to "E" & leslignes as string
                set letest to value of cell celtest -- controle si mail déja envoyé
                if letest = "X" then
                    set leslignes to leslignes + 1
                else
                    exit repeat
                end if
            end repeat
          
            set celnom to "A" & leslignes as string -- initialise les variables de numéro de cellules des données
            set celprenom to "B" & leslignes as string
            set celmail to "C" & leslignes as string
            set celdate to "D" & leslignes as string
          
            set lenom to value of cell celnom as string -- recupère le nom
            if lenom = "missing value" then -- vérifie si la derniere ligne
                exit repeat
            end if
          
          
            set leprenom to value of cell celprenom -- récupère le prenom
            set lemail to value of cell celmail -- récupère le mail
            set ladate to value of cell celdate -- récupère la date
          
            tell application "Mail"
                set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla -- prépare le contenu du mail
              
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
              
              
                tell newMessage
                    --Exemple de mise en forme du texte
                    --repeat with y from 0 to count of contenu
                    --set font of character (y) of content to "Helvetica Bold"
                    --end repeat
                  
                    --repeat with y from 5 to 7
                    --set font of word (y) of content to "Helvetica Bold"
                    --end repeat
                  
                    set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
              
                send newMessage
                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
            end tell
            tell application "Numbers"
                tell table 1 of sheet 1 of document "liste.numbers"
                    set value of cell celtest to "X" -- renseigne numbers mail envoyé
                end tell
            end tell
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
save front document
    quit
end tell
 
Dernière édition:

digisi

Membre junior
26 Avril 2020
30
0
32
Bonjour,
Pour l'erreur d'absence de destinataire, mea culpa, j'avais désactivé ces lignes pour mes essais !
Pour le chemin , du fichier Numbers, j'ai ajouté son ouverture en début du script avec pour chemin: le fichier "liste.numbers" dans un dossier "script mail" dans "documents"
Macintosh HD:Users:****:documents:script mail:liste.numbers

J'ai également ajouter l'enregistrement du fichier numbers en fin, et quitter numbers.
Lorsque tout sera comme tu le souhaites, il faudra enregistrer ce script au format application pour son lancement auto.

Pour le contenu du mail, tu as vu que tu peux modifier le début dans la ligne de code qui est ensuite suivie du contenu de la cellule Numbers "E1".
Bloc de code:
set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla
Bloc de code:
tell application "Finder"
    set chemin to ((path to home folder) & "documents:script mail:liste.numbers") as string
    open chemin
    activate
end tell

tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "E1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        set nbmessage to 0
    
        display dialog "ok"
        repeat
            if nbmessage = 50 then exit repeat -- stop si 50 messages
            repeat
                set celtest to "E" & leslignes as string
                set letest to value of cell celtest -- controle si mail déja envoyé
                if letest = "X" then
                    set leslignes to leslignes + 1
                else
                    exit repeat
                end if
            end repeat
        
            set celnom to "A" & leslignes as string -- initialise les variables de numéro de cellules des données
            set celprenom to "B" & leslignes as string
            set celmail to "C" & leslignes as string
            set celdate to "D" & leslignes as string
        
            set lenom to value of cell celnom as string -- recupère le nom
            if lenom = "missing value" then -- vérifie si la derniere ligne
                exit repeat
            end if
        
        
            set leprenom to value of cell celprenom -- récupère le prenom
            set lemail to value of cell celmail -- récupère le mail
            set ladate to value of cell celdate -- récupère la date
        
            tell application "Mail"
                set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla -- prépare le contenu du mail
            
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
            
            
                tell newMessage
                    --Exemple de mise en forme du texte
                    --repeat with y from 0 to count of contenu
                    --set font of character (y) of content to "Helvetica Bold"
                    --end repeat
                
                    --repeat with y from 5 to 7
                    --set font of word (y) of content to "Helvetica Bold"
                    --end repeat
                
                    set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
            
                send newMessage
                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
            end tell
            tell application "Numbers"
                tell table 1 of sheet 1 of document "liste.numbers"
                    set value of cell celtest to "X" -- renseigne numbers mail envoyé
                end tell
            end tell
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
save front document
    quit
end tell
Bonjour,

Merci pour ton retour.
J'ai testé le fichier et c'est top.
Question, mon fichier va contenir que deux colonnes finalement : mail et blabla.
J'ai tenté de modifier le script mais une erreur apparait : error "Erreur dans Numbers : Il est impossible d’obtenir cell \"B23\" of table 1 of sheet 1 of document \"liste.numbers\"." number -1728 from cell "B23" of table 1 of sheet 1 of document "liste.numbers"
Dernière question, j'ai vu que dans le script il y a une partie mise en page, donc si je souhaite mettre en forme avec des sauts de lignes de cette façon par exemple c'est directement dans le script ou je dois le faire au niveau de numbers ?

En fait non autre question, je suis ok dans le principe que le script sait qu'il a envoyé 50 mails et il s'arrête mais le lendemain quand je le relance il verra qu'il a deja envoyé les 50 mails donc ne fera aucune action non ?

Exemple :

Bonjour,

Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise un texte en faux latin, le Lorem ipsum ou Lipsum.

Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise un texte en faux latin, le Lorem ipsum ou Lipsum.

Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise un texte en faux latin, le Lorem ipsum ou Lipsum.

Cordialement

Capture d’écran 2020-04-28 à 10.30.24.png
Capture d’écran 2020-04-28 à 10.35.22.png
Bloc de code:
tell application "Finder"


    set chemin to ((path to home folder) & "documents:script mails:liste.numbers") as string


    open chemin


    activate


end tell





tell application "Numbers"


    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers


        set CR to (ASCII character 13) -- initialise un retour ligne


        set blabla to value of cell "B1" -- récupère le texte de la cellule E1


        set leslignes to 2 -- initialise le numéro de la première ligne des clients


        set nbmessage to 0


        


        display dialog "ok"


        repeat


            if nbmessage = 50 then exit repeat -- stop si 50 messages


            repeat


                set celtest to "B" & leslignes as string


                set letest to value of cell celtest -- controle si mail déja envoyé


                if letest = "X" then


                    set leslignes to leslignes + 1


                else


                    exit repeat


                end if


            end repeat


            


            set celmail to "C" & leslignes as string -- initialise les variables de numéro de cellules des données


            


            if celmail = "missing value" then -- vérifie si la derniere ligne


                exit repeat


            end if


            


            


            set lemail to value of cell celmail -- récupère le mail


            


            tell application "Mail"


                set contenu to "Bonjour " & blabla -- prépare le contenu du mail


                


                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail


                


                


                tell newMessage


                    --Exemple de mise en forme du texte


                    --repeat with y from 0 to count of contenu


                    --set font of character (y) of content to "Helvetica Bold"


                    --end repeat


                    


                    --repeat with y from 5 to 7


                    --set font of word (y) of content to "Helvetica Bold"


                    --end repeat


                    


                    set toaddresslist to {lemail} -- prépare l'adressed'envoi


                    make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail


                end tell


                


                send newMessage


                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé


            end tell


            tell application "Numbers"


                tell table 1 of sheet 1 of document "liste.numbers"


                    set value of cell celtest to "X" -- renseigne numbers mail envoyé


                end tell


            end tell


            set leslignes to leslignes + 1 -- prépare numéro ligne suivante


        end repeat


    end tell


    save front document


    quit


end tell
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Pour la mise en forme tu peux la faire dans Numbers.
il ne sera pas pris en compte les changement de polices ou de mise en gras etc... cela fait uniquement du copié de texte.
A vérifier !

Pour tes 2 colonnes est-ce les colonnes: A pour les mails destinataire et B pour savoir si il a déjà était envoyé à partir de la ligne 2 , et dans la cellule B1 le texte du mail. Est-ce bien ça.
Si oui, je te fais les modifs.
Attention il ne faut aucune ligne de vide sinon il considère que c'est la fin du fichier.

J'attends ta confirmation.
 

digisi

Membre junior
26 Avril 2020
30
0
32
Pour la mise en forme tu peux la faire dans Numbers.
il ne sera pas pris en compte les changement de polices ou de mise en gras etc... cela fait uniquement du copié de texte.
A vérifier !

Pour tes 2 colonnes est-ce les colonnes: A pour les mails destinataire et B pour savoir si il a déjà était envoyé à partir de la ligne 2 , et dans la cellule B1 le texte du mail. Est-ce bien ça.
Si oui, je te fais les modifs.
Attention il ne faut aucune ligne de vide sinon il considère que c'est la fin du fichier.

J'attends ta confirmation.
Oui c'est exactement ça.
Pour la mise en forme, je peux le faire via numbers donc top.
Sinon concernant ma question :
Dans le principe le script sait qu'il a envoyé 50 mails et qu'il doit s'arrêter mais le lendemain quand je le relance il verra qu'il a deja envoyé les 50 mails donc ne fera aucune action non ? Surtout si mon fichier contient 100 adresses ou plus.
Merci beaucoup pour ton aide.
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Non le script met un "X" dans la cellule "Bx" de la ligne à laquelle il a envoyé le mail.
Le lendemain il vérifie si ce "X" est présent, s'il y est , il passe à l'adresse suivante, sinon il envoie le message. et ça juqu'a ce que 50 nouveaux mails soient envoyés ou que la fin du fichier soit atteinte.
Donc ton fichier Numbers peut contenir autant d'adresse que tu veux, le script n'enverra le mail qu'une seule fois à chacune, et dans l'ordre en partant du haut du tableau.

Le script ajoute dans le contenu du mail:"Bonjour," et 2 sauts de ligne puis le contenu de ta cellule B1.

Si tu as terminé les envoies et que toutes les cellules "Bx" sont cochées "X", il suffit d'effacer ces cellules et tu peux recommencer une nouvelles série d'envoie.

Je te met le script modifié pour uniquement ces 2 colonnes.

Bloc de code:
tell application "Finder"
    set chemin to ((path to home folder) & "documents:script mail:liste.numbers") as string
    open chemin
    activate
end tell

tell application "Numbers"
    tell table 1 of sheet 1 of document "liste.numbers" -- voir document numbers
        set CR to (ASCII character 13) -- initialise un retour ligne
        set blabla to value of cell "B1" -- récupère le texte de la cellule E1
        set leslignes to 2 -- initialise le numéro de la première ligne des clients
        set nbmessage to 0
      
      
        repeat
            if nbmessage = 50 then exit repeat -- stop si 50 messages
            repeat
                set celtest to "B" & leslignes as string
                set letest to value of cell celtest -- controle si mail déja envoyé
                if letest = "X" then
                    set leslignes to leslignes + 1
                else
                    exit repeat
                end if
            end repeat
          
            set celmail to "A" & leslignes as string
          
          
            set lemail to value of cell celmail as string -- recupère le nom
            if lemail = "missing value" then -- vérifie si la derniere ligne
                exit repeat
            end if
          
          
            tell application "Mail"
                set contenu to "Bonjour, " & CR & CR & blabla -- prépare le contenu du mail
              
                set newMessage to make new outgoing message with properties {subject:"Sujet", content:contenu} -- prépare le mail
              
              
                tell newMessage
                    set toaddresslist to {lemail} -- prépare l'adressed'envoi
                    make new to recipient at end of to recipients with properties {address:toaddresslist} -- envoi le mail
                end tell
              
                send newMessage
                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
            end tell
            tell application "Numbers"
                tell table 1 of sheet 1 of document "liste.numbers"
                    set value of cell celtest to "X" -- renseigne numbers mail envoyé
                end tell
            end tell
            set leslignes to leslignes + 1 -- prépare numéro ligne suivante
        end repeat
    end tell
    save front document
    quit
end tell
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Une petite précision, Tel qu'il est fait ce script envoie 50 mails à 1 personne, ceci avait était fait au départ pour pouvoir le personnaliser avec le nom, le prénom etc... du destinataire.

Si tu préfères envoyer le même mail à 50 destinataires (en CCI). Tu me le dis on pourra modifier pour obtenir cela.
 

digisi

Membre junior
26 Avril 2020
30
0
32
Une petite précision, Tel qu'il est fait ce script envoie 50 mails à 1 personne, ceci avait était fait au départ pour pouvoir le personnaliser avec le nom, le prénom etc... du destinataire.

Si tu préfères envoyer le même mail à 50 destinataires (en CCI). Tu me le dis on pourra modifier pour obtenir cela.
Merci le script est top.
Concernant ta suggestion, j'y ai pensé à ta solution d'1 mail pour 50 destinataires au lieu de 50 mails mais la ou j'ai un doute c'est concernant le fait de me faire blacklisté bêtement...
D'ou le fait que quand je le fais manuellement c'est 1 par 1.
As tu un conseil à ce sujet ?
Merci pour ton retour.
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Non pas de conseil, je ne connaît pas les réactions des fournisseur d'accès.

Mais si cela te convient comme ça pas de problème...

Tes tests ont-ils étaient concluant, as tu des modifs à faire ?

Je te rappelle que tu peux exclure une personne en mettant un "X" en colonne B, et tu peux relancer une nouvelle vague de mail après avoir supprimer tous les "X".

si c'est bon enregistres comme application, et programme l'ouverture automatique de cette application soit dans le calendrier soit dans l'économie d'énergie.

Tient moi au courant du résultat ;).