# Automatiser envoi mail journalier



## digisi (26 Avril 2020)

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 (26 Avril 2020)

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 (27 Avril 2020)

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





avec un exemple de script:

```
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 (27 Avril 2020)

zeltron54 a dit:


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


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 (27 Avril 2020)

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 (27 Avril 2020)

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.


```
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
```


----------



## digisi (27 Avril 2020)

zeltron54 a dit:


> 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
> ...


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 (27 Avril 2020)

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 (27 Avril 2020)

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 (27 Avril 2020)

@zeltron54 : hey bien, c'est super pour @digisi. Cela va le dépanner. Et j'ai appris des choses au passage


----------



## digisi (27 Avril 2020)

zeltron54 a dit:


> 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 ?) ?


----------



## digisi (27 Avril 2020)

moderno31 a dit:


> @zeltron54 : hey bien, c'est super pour @digisi. Cela va le dépanner. Et j'ai appris des choses au passage


Exactement ca m'aide énormément.
Pour répondre à ta suggestion d'outil emailing en fait je fais déjà l'envoi tous les jours manuellement un par un la je veux juste gagner du temps surtout.


----------



## zeltron54 (28 Avril 2020)

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".

```
set contenu to "Bonjour " & leprenom & " " & lenom & "," & CR & "Suite à mon mail du " & ladate & " " & blabla
```


```
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
```


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> 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
> ...


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





*


		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

*


----------



## zeltron54 (28 Avril 2020)

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 (28 Avril 2020)

zeltron54 a dit:


> 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 !
> 
> ...


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 (28 Avril 2020)

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.


```
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
```


----------



## zeltron54 (28 Avril 2020)

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 (28 Avril 2020)

zeltron54 a dit:


> 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 (28 Avril 2020)

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  .


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> 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...
> 
> ...


J'ai tenté des tests et voila mes retours.

- Si le fichier numbers est fermé le script ne marche pas du coup qu'elle est l'interêt de mettre en application ? Car dans tous les cas il faut que j'ouvre le fichier numbers avant de lancer l'application ? Existe t'il une solution pour que le script lance tout en 1 clic stp ? 

- Pour info, la mise en page de la cellule numbers fonctionne. Par exemple saut de ligne c'est option + retour.

Sinon question, dans un futur fichier j'envisage de diviser les adresses par département (1 département = 1 feuille avec une liste de mails). Est ce qu'il y a une solution pour que le script commence par exemple par la premiere feuille et enchaine sur les suivante au fur et a mesure.

Sinon quand j'essaie en mode application ca me demande toujours une autorisation avant de lancer, existe t'il une solution également ? J'ai cherché dans la partie Sécurité et confidentialité pour débloquer mais rien de proposé.

De plus pour l'ouverture automatique via le calendrier ça m'intéresse que l'envoie se fasse du lundi au vendredi à 9h30, possible via le script ?  

Merci d'avance pour tes réponses.


----------



## zeltron54 (28 Avril 2020)

On va procéder un problème après l'autre.
Le fichier Numbers ne s'ouvre pas ! il y a pourtant une demande d'ouverture dans le script.
Quel est son nom et ou se trouve t'il ?
Y a t'il un message d'erreur lors du lancement du script ... lequel ?

Si tu as des doutes sur le chemin , fait une demande d'info du fichier (cmd + i) et fait une copie d'écran.


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> On va procéder un problème après l'autre.
> Le fichier Numbers ne s'ouvre pas ! il y a pourtant une demande d'ouverture dans le script.
> Quel est son nom et ou se trouve t'il ?
> Y a t'il un message d'erreur lors du lancement du script ... lequel ?
> ...


Ok top

le fichier ce nome liste.numbers
il se trouve dans un dossier qui lui même se trouve dans documents (voir pièce jointe)
oui il y a un message d'erreur (voir pièce jointe)
concernant le chemin il est visible dans la pièce jointe également


----------



## zeltron54 (28 Avril 2020)

Ok donc c'est un problème de rapidité d'ouverture du fichier sur ton ordi.

On va ajouter une tempo pour attendre qu'il soit ouvert on va essayer 3 secondes
Il faut ajouter ;  delay 3   a la 5ieme ligne
ce qui donne pour le 1er pavé:


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

test !


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> Ok donc c'est un problème de rapidité d'ouverture du fichier sur ton ordi.
> 
> On va ajouter une tempo pour attendre qu'il soit ouvert on va essayer 3 secondes
> Il faut ajouter ;  delay 3   a la 5ieme ligne
> ...


Top, ça marche !


----------



## zeltron54 (28 Avril 2020)

Ok

Donc lorsque tu as une appli de ton script la demande qui demande d'autoriser cette appli est à valider.
Ton appli s'appelle "Sans titre" donne lui un nom plus explicite.

après un premier lancement il faut aller dans préférences système --> Sécurité et confidentialité-->Accessibilité
Déverrouiller le cadena avec ton mot de passe et cocher ton appli, si elle n'y est pas, cliquer sur + la rechercher et la cocher)
Ceci sera à faire chaque fois que tu modifieras l'appli.

Pour le changement de feuille par département c'est plus complexe pour réaliser un enchainement, je regarde et je te dirais ça.

J'attend le retour pour l'autorisation.
On verra ensuite comment programmer son lancement auto.


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> Ok
> 
> Donc lorsque tu as une appli de ton script la demande qui demande d'autoriser cette appli est à valider.
> Ton appli s'appelle "Sans titre" donne lui un nom plus explicite.
> ...


C'est ok pour l'autorisation


----------



## zeltron54 (28 Avril 2020)

Pour le lancement auto.
Ton ordi est'il toujours allumé à l'heure de l'envoi des mail?
Si non il faut l'allumer 5 ou 10 minutes avant l'heure
Pour ça dans préférences système --> Economiseur d'énergie--> bouton programmer --> démarrer ou réactiver--> tu sélectionnes les jours et l'heure.


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> Pour le lancement auto.
> Ton ordi est'il toujours allumé à l'heure de l'envoi des mail?
> Si non il faut l'allumer 5 ou 10 minutes avant l'heure
> Pour ça dans préférences système --> Economiseur d'énergie--> bouton programmer --> démarrer ou réactiver--> tu sélectionnes les jours et l'heure.


Oui il est allumé à l'heure de l'envoi des mails. 
Par contre j'ai quand même une question a ce sujet si un jour j'utilise cet allumage automatique, il prend en compte les MDP ?


----------



## zeltron54 (28 Avril 2020)

Pour les MDP je n'ai pas essayé...

Pour lancer l'appli:
Dans calendrier tu crées les évènements les bons jours tu cliques sur la date--> dans récurences tu mets toutes les semaines,
Dans alertes-->personnalisé --> message avec son tu choisis ouvrir le fichier --> autres et tu sélectionnes ton appli. et tu choisis au moment de l'évènement.

Tu crées un évènement par jour de la semaine interressés.


----------



## zeltron54 (28 Avril 2020)

Pour le MDP à l'ouverture auto, il ne prend pas de MDP, donc il faut soit le désactiver, soit créer une session spéciale pour ça sans mot de passe...

Pour ton changement de feuille je regarde, dans les prochains jours. Et je te tiens au courant.
Sinon tu mets tout à la suite sur la même feuille..


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> Pour les MDP je n'ai pas essayé...
> 
> Pour lancer l'appli:
> Dans calendrier tu crées les évènements les bons jours tu cliques sur la date--> dans récurences tu mets toutes les semaines,
> ...


Voila c'est fait, j'ai mis 5 min pour la durée de l'événement


----------



## zeltron54 (28 Avril 2020)

Je vois que tu as mis ça au mois de mai ...
Fait un test avant, demain par exemple ou même dans 2 minutes pour vérifier si tout se passe bien.


----------



## digisi (28 Avril 2020)

zeltron54 a dit:


> Je vois que tu as mis ça au mois de mai ...
> Fait un test avant, demain par exemple ou même dans 2 minutes pour vérifier si tout se passe bien.


Je viens de tester à l'instant et ca marche vraiment bien, l'évènement se lance et fait de même avec le script qui applique bien le schéma.


----------



## zeltron54 (28 Avril 2020)

Bien,
Alors pour faire un multi-feuille j'ai une solution.
Il faut que la première feuille se nomme "Ain-01" (impératif), la deuxième pour mon cas --> "Aisne-02",la troisième "Allier-03"  etc...

Dans le fichier numbers après la dernière adresse de chaque page, la ligne suivante sera en colonne A (à la place de l'adresse mail-->"Fin" et la colonne B de cette même ligne sera le nom de la feuille suivante.
exemple: la dernière ligne de la feuille Ain-01 sera en colonne A--> Fin et en colonne B-->Aisne-02.

j'espère avoie été assez clair.

Bon test  (chez moi cela fonctionne)
le script:

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

tell application "Numbers"
    set lafeuille to "Ain-01"
    set CR to (ASCII character 13) -- initialise un retour ligne
    set nbmessage to 0
    set leslignes to 2 -- initialise le numéro de la première ligne des clients
    set lasuite to "ain-01"
    repeat
        tell table 1 of sheet lafeuille of document "liste.numbers" -- voir document numbers
            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
        end tell
       
       
        if nbmessage = 50 then exit repeat -- stop si 50 messages
       
        tell table 1 of sheet lasuite of document "liste.numbers" -- voir document numbers
           
            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 celsuite to "A" & (leslignes + 1) as string
            set suite to value of cell celsuite
           
            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
        end tell
       
        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 lasuite of document "liste.numbers"
                set value of cell celtest to "X" -- renseigne numbers mail envoyé
               
                if suite = "fin" then
                    set cellasuite to "B" & (leslignes + 1) as string
                    set lasuite to value of cell cellasuite
                    set leslignes to 1
                end if
               
            end tell
        end tell
        set leslignes to leslignes + 1 -- prépare numéro ligne suivante
    end repeat
   
    save front document
    quit
end tell
```


----------



## zeltron54 (29 Avril 2020)

Bonjour,
Alors quelques modifs pour que le script passe automatiquement à la feuille suivante.

Il suffit si une feuille suivante existe d'entrée dans la dernière cellule de la colonne "A" à la place d'une adresse mail  le mot "Fin"

Quand le script trouvera "Fin" comme adresse mail, il ira à la feuille suivante.
Bien sur ne pas mettre "fin" s'il n'y a pas de feuille suivante.
le script:


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

tell application "Numbers"
    set lafeuille to 1
    set CR to (ASCII character 13) -- initialise un retour ligne
    set nbmessage to 0
    set leslignes to 2 -- initialise le numéro de la première ligne des clients
    set lasuite to 1
    repeat
        tell table 1 of sheet lafeuille of document "liste.numbers" -- voir document numbers
            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
        end tell
        
        
        if nbmessage = 50 then exit repeat -- stop si 50 messages
        
        tell table 1 of sheet lasuite of document "liste.numbers" -- voir document numbers
            
            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 celsuite to "A" & (leslignes + 1) as string
            set suite to value of cell celsuite
            
            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
        end tell
        
        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 lasuite of document "liste.numbers"
                set value of cell celtest to "X" -- renseigne numbers mail envoyé
                
                if suite = "fin" then
                    set lasuite to lasuite + 1
                    set leslignes to 1
                end if
                
            end tell
        end tell
        set leslignes to leslignes + 1 -- prépare numéro ligne suivante
    end repeat
    
    save front document
    quit
end tell
```


----------



## digisi (29 Avril 2020)

zeltron54 a dit:


> Bonjour,
> Alors quelques modifs pour que le script passe automatiquement à la feuille suivante.
> 
> Il suffit si une feuille suivante existe d'entrée dans la dernière cellule de la colonne "A" à la place d'une adresse mail  le mot "Fin"
> ...


Bonjour,

J'étais un peu off aujourd'hui, merci beaucoup pour ce nouveau script et le temps que tu m'accordes.
Je vais le tester ce soir pour voir je te fais un retour rapidement.


----------



## digisi (30 Avril 2020)

zeltron54 a dit:


> Bonjour,
> Alors quelques modifs pour que le script passe automatiquement à la feuille suivante.
> 
> Il suffit si une feuille suivante existe d'entrée dans la dernière cellule de la colonne "A" à la place d'une adresse mail  le mot "Fin"
> ...



Bon verdict : Top 

Question toi qui t'y connais bien, j'ai un tableau numbers qui existe en version textedit avec du texte et des mails.
Le tableau compte au moins 13000 lignes en comptant le texte et les mails. Le fichier texte n'en parlons pas j'envoie pas le bout.
La je traite manuellement l'export des mails pour avoir une liste propre.
Existe t'il une façon par le biais d'un script de le faire automatiquement et m'épargner le fait de regarder ligne par ligne ? 
Merci d'avance pour ta réponse.


----------



## zeltron54 (30 Avril 2020)

Je n'ai pas bien compris .
Un tableau numbers en version textedit ...???
une éventuelle copie d'écran pourrait m'aider à comprendre.


----------



## digisi (30 Avril 2020)

zeltron54 a dit:


> Je n'ai pas bien compris .
> Un tableau numbers en version textedit ...???
> une éventuelle copie d'écran pourrait m'aider à comprendre.


Non en fait le contenu je l'ai en deux versions : textedit et numbers 
Et en gros moi je souhaite récupérer les mails.
A ce jour je fais copier coller dans un nouveau tableau pour avoir une base de mail propre et automatiser l'envoi


----------



## zeltron54 (30 Avril 2020)

Tout le contenu de ton fichier texte est comme ça, et tu veux dans chaque ligne récupérer le mail ?
Dans ton petit exemple tu veux récupérer: cgigi@tranat.net     et   maxlemoine@tranat.net
ou seulement celle de l'envoyeur cgigi@tranat.net

Autre question ces mail à récupérer sont 'ils tous dans une ligne commençant par De:xxxxx ou il y en a t'il dans d'autres lignes ?

Ce n'est que les premières question pour voir l'approche !


----------



## digisi (30 Avril 2020)

zeltron54 a dit:


> Tout le contenu de ton fichier texte est comme ça, et tu veux dans chaque ligne récupérer le mail ?
> Dans ton petit exemple tu veux récupérer: cgigi@tranat. net     et   maxlemoine@tranat.net
> ou seulement celle de l'envoyeur cgigi@tranat.net
> 
> ...


Oui le fichier texte est comme ca, sinon parfois les mails sont dans le corps du message.
Je veux tout récupérer expéditeur et destinataire et ce qui est dans le corps


----------



## zeltron54 (30 Avril 2020)

Le seul problème est de définir le début et le fin de l'adresse mail. J'ai mis 3 possibilités de séparateur: < , > et espace voir si ça suffira.
Le script te demande choisir ton fichier texte à traiter, fait le boulot en créant une fichier texte sur le bureau "les adresses mail.txt"qui contient 1 adresse mail trouvée par ligne. Il te met un message lorsqu'il a terminé... ça risque d'être long en applescript. Un script shell serait mieux adapter pour ce cas, mais je suis incapable de le faire.
le script

```
set monfichier to choose file with prompt "Sélectionner le fichier texte à traiter"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set nblignes to count of paragraph of vartoto
repeat with j from 1 to nblignes
    set vartoto1 to ""
    set AppleScript's text item delimiters to "@"
    set vartoto1 to paragraph j of vartoto as string
    set la to offset of "@" in vartoto1
    if la = 0 then
    else -- Si la ligne contient un @
        set separateur to {">", "<", " "} -- Défini les séparateurs possible avant et après une adresse mail
        set nbchar to count item of vartoto1
        set la1 to (la - 1)
       
        repeat
            if item la1 of vartoto1 is in separateur then
                exit repeat
            end if
            set la1 to (la1 - 1)
            if la1 = 0 then exit repeat
        end repeat
       
        set lafin to (la + 1)
        repeat
            if item lafin of vartoto1 is in separateur then
                exit repeat
            end if
            set lafin to (lafin + 1)
            if lafin = nbchar + 1 then exit repeat
        end repeat
        set adress to text (la1 + 1) thru (lafin - 1) of vartoto1
       
        set lelog to open for access ((path to desktop folder as text) & "les adresses mail.txt") as text with write permission
        write adress & return to lelog starting at eof
        close access lelog
    end if
end repeat

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (1 Mai 2020)

Après réflexions j'ai apporté 2 modifs,
-J'ai ajouté les séparateurs parenthèses ( ) [ ]
- Si un paragraphe (bloc de texte compris entre 2 retours lignes) comportait plusieurs adresses mail, seule la 1ere était prise en compte.
le nouveau script:

```
set monfichier to choose file with prompt "Sélectionner le fichier texte à traiter"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set nblignes to count of paragraph of vartoto
repeat with j from 1 to nblignes
    set vartoto1 to ""
    set AppleScript's text item delimiters to ""
    set vartoto1 to paragraph j of vartoto as string
    set la to offset of "@" in vartoto1
    if la = 0 then
    else -- Si la ligne contient un @
        set separateur to {">", "<", " ", "(", ")", "[", "]"} -- Défini les séparateurs possible avant et après une adresse mail
        set nbchar to count item of vartoto1
        set la1 to (la - 1)
        repeat
            
            if la = 0 then
                exit repeat
            else
                
                repeat
                    if item la1 of vartoto1 is in separateur then
                        exit repeat
                    end if
                    set la1 to (la1 - 1)
                    if la1 = 0 then exit repeat
                end repeat
                
                set lafin to (la + 1)
                repeat
                    if item lafin of vartoto1 is in separateur then
                        exit repeat
                    end if
                    set lafin to (lafin + 1)
                    if lafin = nbchar + 1 then exit repeat
                end repeat
                set adress to text (la1 + 1) thru (lafin - 1) of vartoto1
                
                set lelog to open for access ((path to desktop folder as text) & "les adresses mail.txt") as text with write permission
                write adress & return to lelog starting at eof
                close access lelog
            end if
            set vartoto1 to characters (la + 1) thru nbchar of vartoto1 as string
            set nbchar to count item of vartoto1
            set la to offset of "@" in vartoto1
            set la1 to (la - 1)
        end repeat
    end if
    
end repeat

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (1 Mai 2020)

Bonjour,
Des retours pour le script extrait adresse ??


----------



## zeltron54 (3 Mai 2020)

Bonjour,
Confinement oblige, je me suis occupé.
Le nouveau script te demande de choisir ton fichier texte à traiter
Il en extrait toutes les adresses mail dans un fichier texte sur le bureau du nom de "Les adresses mail.txt"
Il ouvre ensuite ce fichier dans numbers et supprime toutes les adresses en doubles et enregistre ce fichier sur le bureau au nom de "Les adresses mail.numbers" . Les adresses sont par ordre alphabétique (tri oblige pour suppression des doubles).
Il te met un message lorsqu'il a terminé.

La colonne A  cellule A1 = "mes adresses mail"
Les cellules A2 et suivantes contiennent les adresses mail. (prêtent pour le script d'envoi de mail)
Chez moi cela fonctionne...
Donne un retour !


```
set monfichier to choose file with prompt "Sélectionner le fichier texte à traiter"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set lelog to open for access ((path to desktop folder as text) & "les adresses mail.txt") as text with write permission
write "Mes adresses mail" & return to lelog starting at eof
close access lelog

set separateur to {">", "<", " ", "(", ")", "[", "]"} -- Défini les séparateurs possible avant et après une adresse mail
set AppleScript's text item delimiters to ""
set nblignes to count of paragraph of vartoto
repeat with j from 1 to nblignes
    set vartoto1 to ""
    set vartoto1 to paragraph j of vartoto as string
    set la to offset of "@" in vartoto1
    if la = 0 then
    else -- Si la ligne contient un @
        set nbchar to count item of vartoto1
        set la1 to (la - 1)
        repeat
            
            if la = 0 then
                exit repeat
            else
                repeat
                    if item la1 of vartoto1 is in separateur then
                        exit repeat
                    end if
                    set la1 to (la1 - 1)
                    if la1 = 0 then exit repeat
                end repeat
                
                set lafin to (la + 1)
                repeat
                    if item lafin of vartoto1 is in separateur then
                        exit repeat
                    end if
                    set lafin to (lafin + 1)
                    if lafin = nbchar + 1 then exit repeat
                end repeat
                set adress to text (la1 + 1) thru (lafin - 1) of vartoto1
                
                set lelog to open for access ((path to desktop folder as text) & "les adresses mail.txt") as text with write permission
                write adress & return to lelog starting at eof
                close access lelog
            end if
            set vartoto1 to characters (la + 1) thru nbchar of vartoto1 as string
            set nbchar to count item of vartoto1
            set la to offset of "@" in vartoto1
            set la1 to (la - 1)
        end repeat
    end if
end repeat

tell application "Finder"
    set chemin to ((path to desktop folder) & "Les adresses mail.txt") as string
    set chemin to chemin as alias
end tell

tell application "Numbers"
    activate
    open chemin
    delay 3
    set nr1 to 2
    set nr2 to 3
    
    tell table 1 of sheet 1 of front document
        
        sort by column "a"
        
        try
            repeat
                set rang1 to nr1 as string
                set rang2 to nr2 as string
                set la1 to value of cell ("A" & rang1)
                set la2 to value of cell ("A" & rang2)
                if la2 = la1 then
                    remove row nr2
                    set nr1 to (nr1 - 1)
                    set nr2 to (nr2 - 1)
                end if
                set nr1 to (nr1 + 1)
                set nr2 to (nr2 + 1)
            end repeat
        end try
    end tell
    
    set chemin to ((path to desktop folder) & "Les adresses mail.numbers") as string
    save front document in file chemin
    quit
end tell


tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## digisi (5 Mai 2020)

zeltron54 a dit:


> Bonjour,
> Confinement oblige, je me suis occupé.
> Le nouveau script te demande de choisir ton fichier texte à traiter
> Il en extrait toutes les adresses mail dans un fichier texte sur le bureau du nom de "Les adresses mail.txt"
> ...


Hello,

Désolé pour la réponse tardive, mais problème d'internet.
Alors pour le script d'envoi top et celui pour extraire pareil.
J'ai gagné beaucoup de temps sur ces taches rébarbatives.
Je réfléchis à d'autres façons d'optimisation de mon temps.
Par contre j'ai pensé a quelque chose concernant l'automatisation des mails, pourrait on l'améliorer en prenant un modèle de mail créé en signature (je viens d'y penser car la mise en page serait plus simple) ?
Au lieu de pointer sur le texte de la colonne B1 il choisirait une signature (1, 2, 3 ou autre)
Le schéma : copie de l'email, choix de la signature, envoi et X pour dire que c'est fait
Pour ce script notamment

```
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
```

Bonne journée,


----------



## zeltron54 (5 Mai 2020)

Bonjour,
Je ne vois pas pourquoi mettre des contenus de mail en signature pour aller ensuite choisir, serait plus simple ?

Si tu dois avoir plusieurs contenu de mail, alors simplement les créer dans les cellules de la prermière page de numbers en C1, C2, C3 etc... ou autres  cellules à ta convenances, ou même écrire ces différents contenus dans des fichiers texte, (autant de fichiers que de modèle de mail) que le script irait chercher en fonction de tes besoins (tes critères de choix).


----------



## digisi (5 Mai 2020)

zeltron54 a dit:


> Bonjour,
> Je ne vois pas pourquoi mettre des contenus de mail en signature pour aller ensuite choisir, serait plus simple ?
> 
> Si tu dois avoir plusieurs contenu de mail, alors simplement les créer dans les cellules de la prermière page de numbers en C1, C2, C3 etc... ou autres  cellules à ta convenances, ou même écrire ces différents contenus dans des fichiers texte, (autant de fichiers que de modèle de mail) que le script irait chercher en fonction de tes besoins (tes critères de choix).


En fait comme tu le dis c'est que j'ai 2 contenus de mails

Premier contact
Relance suite premier contact
Ensuite je suis en train de penser à me constituer une BDD numbers suite aux retours du premier mail, j'envisage de créer une colonne "Présentation" si par exemple je mets dans la cellule "Oui" penses tu qu'il serait possible d'envoyer un mail automatiquement avec une présentation plus personnalisée (soit dans la foulée ou en fin de journée une fois mon travail terminé)


----------



## zeltron54 (5 Mai 2020)

On peut tout envisager, mon premier exemple envoyait des mails personnalisés avec Nom prénom  contenu etc...

Il suffit dans ta feuille numbers de mettre des colonnes de contrôle d'envoi en en changeant la valeur après excécution de l'envoi.

Mais pour tout ça il faut avoir un projet bien pensé et mûr afin de construire tout en une foi, car chaque ajout devient du rafistolage qui fini par provoquer des bugs et du code à rallonge.

Mon avis est donc: Bien réfléchir à ce que l'on veux pour tout poser à plat, que l'objectif soit complet et clair, avant de commencer à écrire le code.
Bon courage...


----------



## digisi (5 Mai 2020)

zeltron54 a dit:


> On peut tout envisager, mon premier exemple envoyait des mails personnalisés avec Nom prénom  contenu etc...
> 
> Il suffit dans ta feuille numbers de mettre des colonnes de contrôle d'envoi en en changeant la valeur après excécution de l'envoi.
> 
> ...


C'est justement ce sur quoi je travaille en ce moment.
Question, pour les scripts tu me les as adapté pour numbers mais si je suis amené a utiliser excel mac ou Open office par exemple est ce que c'est adaptable ?
Je te pose la question car c'est vrai qu'il est plus simple de créer une BDD dessus (enfin pour ma part).
Et je préfère demander avant de me lancer et me dire qu'au final ce n'est pas possible...


----------



## zeltron54 (5 Mai 2020)

Les scripts sont quand même fait pour automatiser les taches journalières répétitives.

Pour un projet professionnel, comme tu as l'air de le présenter maintenant, il vaudrait certainement mieux s'adresser à un programmeur professionnel.

Pour transposer sur excel cela sera certainement possible, mais vu qu'excel possède du VBA il vaudra mieux revoir complétement l'approche.
Quand à open office je ne connais pas du tout.

Dans tous les cas défini exactement ton besoin complet, ce sera à l'examen du projet complet que seront choisis les outils pour le réaliser, peut être un logiciel de base de données style Filemaker, Mysql ou autre...


----------



## digisi (8 Mai 2020)

zeltron54 a dit:


> Les scripts sont quand même fait pour automatiser les taches journalières répétitives.
> 
> Pour un projet professionnel, comme tu as l'air de le présenter maintenant, il vaudrait certainement mieux s'adresser à un programmeur professionnel.
> 
> ...


Bonjour, 

Après réflexion, je vais alimenter BDD manuellement.
Sinon question concernant le script d'envoi, j'ai effectué des tests ce matin mais je n'avais pas fait attention mais ma signature de mail n'est pas prise en compte. Pourtant quand j'envoie un mail manuellement elle apparaît mais pas quand j'utilise le script.
Merci d'avance pour ta réponse.

Bon après-midi


----------



## zeltron54 (8 Mai 2020)

Bonjour,
Quand tu envois un mail manuellement tu utilises un modèle mail par défaut. Dans le script on construit le mail de toute pièce.

Lors de la préparation du mail dans le script il faut lui ajouter la signature.
cette ligne:

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

devient:

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

En changeant, évidemment "Nom de ta signature"  par le nom que tu as donné dans les préférences mail à la signature que tu veux utiliser.


----------



## digisi (8 Mai 2020)

zeltron54 a dit:


> Bonjour,
> Quand tu envois un mail manuellement tu utilises un modèle mail par défaut. Dans le script on construit le mail de toute pièce.
> 
> Lors de la préparation du mail dans le script il faut lui ajouter la signature.
> ...


Merci pour ta réponse rapide, j'ai effectué la modification mais en testant voila le message d'erreur.


----------



## zeltron54 (8 Mai 2020)

Quel est le nom exact de ta signature dans préférences de mail?
Là j'ai du mal car je n'uitise pas mail , mais outloock donc je peux pas tester...

Edit: d'après ce que j'ai pu trouver sur le net, le fonctionnement de signature est différent sur mail et outloock.
Donc j'ai modifié le script dans lequel j'ai appelé la signature "signature #1" Sera à adapter (si ça fonctionne)
J'ai mis les 2 nouvelles lignes de code en rouge.
J'attends ton retour.


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

tell application "Numbers"
    set lafeuille to 1
    set CR to (ASCII character 13) -- initialise un retour ligne
    set nbmessage to 0
    set leslignes to 2 -- initialise le numéro de la première ligne des clients
    set lasuite to 1
    repeat
        tell table 1 of sheet lafeuille of document "liste.numbers" -- voir document numbers
            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
        end tell
       
       
        if nbmessage = 50 then exit repeat -- stop si 50 messages
       
        tell table 1 of sheet lasuite of document "liste.numbers" -- voir document numbers
           
            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 celsuite to "A" & (leslignes + 1) as string
            set suite to value of cell celsuite
           
            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
        end tell
       
        tell application "Mail"
            set contenu to "Bonjour, " & CR & CR & blabla -- prépare le contenu du mail
            set Masignature to "signature #1"
            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
                set message signature of newMessage to signature Masignature
               
                send newMessage
            end tell
            set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
        end tell
        tell application "Numbers"
            tell table 1 of sheet lasuite of document "liste.numbers"
                set value of cell celtest to "X" -- renseigne numbers mail envoyé
               
                if suite = "fin" then
                    set lasuite to lasuite + 1
                    set leslignes to 1
                end if
               
            end tell
        end tell
        set leslignes to leslignes + 1 -- prépare numéro ligne suivante
    end repeat
   
    save front document
    quit
end tell
```


----------



## zeltron54 (8 Mai 2020)

Mince la couleur n'est pas prise en compte: les 2 nouvelles lignes sont:

set Masignature to "signature #1"
set message signature of newMessage to signature Masignature

Mais je ne suis pas convaincu que cela fonctionne !


----------



## zeltron54 (8 Mai 2020)

Rien trouvé de concluant.
--1ere solution : incorporer ta signature dans le mail en cellule B1 (le plus simple)
--2ieme solution à essayer: La signature étant définie et affectée à un compte d'envoi dans les préférences de mail, ajouter dans le script que ce soit ce compte qui soit utilisé pour l'envoie.

cette ligne:

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

devient:

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

En changeant, évidemment "adressemail ducompteàutiliser"  par l'adresse mail que tu veux utiliser "xxxxxxx@xxxx.xv".


----------



## zeltron54 (8 Mai 2020)

Après bien des recherches sur le net, rien trouvé de correct, cela ressemble à un bug dans le dictionnaire de l'appli mail.

Je te conseille donc d'incorporer ta signature dans le corps du message. Rien de mieux à te proposer pour le moment.


----------



## digisi (8 Mai 2020)

zeltron54 a dit:


> Après bien des recherches sur le net, rien trouvé de correct, cela ressemble à un bug dans le dictionnaire de l'appli mail.
> 
> Je te conseille donc d'incorporer ta signature dans le corps du message. Rien de mieux à te proposer pour le moment.


Hello,

J'allais justement te faire un retour la meilleure solution est la signature dans le corps du message, j'ai testé et re testé le script c'est parfait. Je te ferais un retour fin de semaine prochaine suite à la première vague d'envois.
Encore merci pour ta disponibilité et ton aide.

Bonne soirée,


----------



## zeltron54 (8 Mai 2020)

Ok content pour toi !

Edit: J'y pense , j'espère que tu as pensé à renseigner le "sujet", dans le script il inscrit "sujet" c'est pas très original  ...


----------



## digisi (11 Mai 2020)

zeltron54 a dit:


> Ok content pour toi !
> 
> Edit: J'y pense , j'espère que tu as pensé à renseigner le "sujet", dans le script il inscrit "sujet" c'est pas très original  ...


Hello, oui j'y ai pensé


----------



## zeltron54 (11 Mai 2020)

Ok
Je reste à dispo si besoin !
Bye


----------



## digisi (11 Mai 2020)

zeltron54 a dit:


> Ok
> Je reste à dispo si besoin !
> Bye


Re,
Suite a l'envoi de ce matin, voila un premier retour.
Le script se lance très bien automatiquement avec le calendrier, en revanche petit bémol que je constate c'est que le fait d'envoyer en même temps les 50 mails encombre la boite d'envoi. Pour tout te dire il me reste encore 20 mails en cours d'envoi sur 50 alors que j'ai programmé l'envoi pour 9h30 ce matin.
Une idée pour y remédier ? J'avais pensé a un petit délai entre les envois ? 
Qu'en penses tu ?


----------



## zeltron54 (11 Mai 2020)

Tu peux effectivement mettre un délai entre chaque envoi, je ne suis pas convaincu que cela empêche le problème, mais rien n'empêche d'essayer. Les mails sont envoyés quand même ?  . y a t'il des pièces jointes ou juste ton texte?
Pour mettre un délai il faut ajouter une ligne, juste après les lignes" Send newmessage" et "set nbmessage to nbmessage + 1 --compte le nombre de message envoyé" , tu ajoutes :   "delay x" (x en secondes)


----------



## digisi (11 Mai 2020)

zeltron54 a dit:


> Tu peux effectivement mettre un délai entre chaque envoi, je ne suis pas convaincu que cela empêche le problème, mais rien n'empêche d'essayer. Les mails sont envoyés quand même ?  . y a t'il des pièces jointes ou juste ton texte?
> Pour mettre un délai il faut ajouter une ligne, juste après les lignes" Send newmessage" et "set nbmessage to nbmessage + 1 --compte le nombre de message envoyé" , tu ajoutes :   "delay x" (x en secondes)


Oki top, non pas de pièce jointe uniquement du texte.
Mais sinon les mails sont envoyés sans aucun soucis.


----------



## zeltron54 (11 Mai 2020)

Donc un délai ne servira à rien, sinon que au lieu que ce soit l'appli mail qui attende, ce sera le script qui attendra !...


----------



## digisi (19 Mai 2020)

zeltron54 a dit:


> Donc un délai ne servira à rien, sinon que au lieu que ce soit l'appli mail qui attende, ce sera le script qui attendra !...


Hello, petite remontée, le script porte ses fruits. En revanche petite problématique au niveau de Mail Mac au bout d'un moment les envois se stoppent et reste dans la boite d'envoi. Penses tu qu'il y a une solution à cette problématique ?
Bonne journée,


----------



## zeltron54 (19 Mai 2020)

Bonjour,

Lorsque mail bloque, il y a combien de mails dans la boite d'envoi ?

Je vois 3 possibilités (à tester !)
1 - Programmer l'envoi des mails par plus petits paquets (par exemple 5 vagues de 10 mails) chaque vagues espacée de xx minutes  xx en fonction de la vitesse d'envoi de mail (dépend de la machine et de la connexion) là faut faire des essais pour déterminer la bonne cadence.

2 - Dans le programme mettre un délai entre chaque envoi de mail (idem délai à déterminer en fonction de la vitesse d'envoi).

3- Dans le programme, attendre avant d' envoyer le mail suivant que la boite d'envoi soit vide (cette solution va allonger le temps des envois). En effet le test de vérification du contenu de la boite d'envoi va tourner en boucle et ralentir l'exécution.

Je n'ai testé aucune de ces solutions ! (d'autant que je n'utilise pas mail, mais outlook)


----------



## digisi (3 Juin 2020)

zeltron54 a dit:


> Bonjour,
> 
> Lorsque mail bloque, il y a combien de mails dans la boite d'envoi ?
> 
> ...



Hello,

Désolé pas pu revenir vers toi plus tôt. J'ai conservé le script initial qui est très bien, je gagne déjà pas mal de temps.
Concernant la boite d'envoi, je fais un rafraichissement pour relancer les mails bloqués.
Question, j'ai un document pdf a ajouter au mail est ce que c'est possible stp ?
Merci d'avance pour ton retour.

Bonne journée,


----------



## zeltron54 (3 Juin 2020)

Bonjour,

Normalement pas de problème pour joindre 1 ou plusieurs pièces jointes.

Il suffit de l'ajouter avant l'envoi.
Je te joins l' ajout à faire dans le bloc "tell newMessage", j'ai mis dans l'exemple pour 2 pièces jointes.
Il faudra adapter les adresses de ces documents !
Dans le code j'ai englobé une partie du code existant.

Merci d'avance pour ton retour...


```
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
                   
                    --Ajout pièces jointes
                    set PieceJointe_list to {"Macintosh HD:Users:Nom_utilisateur:desktop:mapiecejointe 1.pdf"} & {"Macintosh HD:Users:Nom_utilisateur:desktop:mapiecejointe 1.pdf"}
                    repeat with nbpj from 1 to count PieceJointe_list
                        set mapj to item nbpj of PieceJointe_list as alias
                        tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph
                    end repeat
                    --Fin de l'ajout
                   
                end tell
               
                send newMessage
                set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
            end tell
```


----------



## digisi (11 Juin 2020)

zeltron54 a dit:


> Bonjour,
> 
> Normalement pas de problème pour joindre 1 ou plusieurs pièces jointes.
> 
> ...


Hello,

J'espère que tu vas bien, merci pour ton retour, je viens de tester avec le code mais j'ai le message d'erreur ci-dessous.
Apparemment c'est par rapport à l'alias comme tu peux le voir.
Aurais-tu une solution à cette problématique stp ? 
Merci d'avance pour ta réponse

Bonne soirée,


```
tell application "Finder"


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


    open chemin


    activate


    delay 3


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:"test", 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


                    


                    --Ajout pièces jointes


                    set PieceJointe_list to {"documents:script mail:presentation.pdf"}


                    repeat with nbpj from 1 to count PieceJointe_list


                        set mapj to item nbpj of PieceJointe_list as alias


                        tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph


                    end repeat


                    --Fin de l'ajout


                    


                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
```


----------



## zeltron54 (11 Juin 2020)

Bonjour,

Le message signale qu'il ne trouve pas le fichier à cette adresse.

Il faut le chemin complet du fichier du genre:

```
{"Macintosh HD:Users:Nom_utilisateur:documents:script mail:presentation.pdf"}
```

en remplacant:  Macintosh HD par le nom de ton disque dur et Nom_utilisateur par le tiens.

tu peux aussi définir le chemin de la P.J. dans une variable.


```
--Ajout pièces jointes
                   set cheminPJ to ((path to home folder) & "documents:script mail:presentation.pdf")
                    set PieceJointe_list to {cheminPJ}
                    repeat with nbpj from 1 to count PieceJointe_list
                        set mapj to item nbpj of PieceJointe_list as alias
                        tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph
                    end repeat
                    --Fin de l'ajout
```


----------



## digisi (11 Juin 2020)

zeltron54 a dit:


> Bonjour,
> 
> Le message signale qu'il ne trouve pas le fichier à cette adresse.
> 
> ...


Merci j'ai effectué la modification, donc le mail par correctement mais il n'y a pas la PJ.
Et bizarrement pas de message d'erreur.


----------



## zeltron54 (11 Juin 2020)

Le chemin n'est pas bon avec le nouveau script il faut le prendre dans un bloc tell finder! (erreur de ma part!)
Essai avec ce bloc!

```
--Ajout pièces jointes
            tell application "Finder"
                set cheminPJ to ((path to home folder) & "documents:script mail:presentation.pdf") as string
            end tell
            set PieceJointe_list to {cheminPJ}
            repeat with nbpj from 1 to count PieceJointe_list
               
                set mapj to item nbpj of PieceJointe_list as alias
                tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph
            end repeat
            --Fin de l'ajout
```

Dis moi si c'est bon !


----------



## digisi (12 Juin 2020)

zeltron54 a dit:


> Le chemin n'est pas bon avec le nouveau script il faut le prendre dans un bloc tell finder! (erreur de ma part!)
> Essai avec ce bloc!
> 
> ```
> ...


Hello, toujours le même problème. Dans le mail il n'y a pas la PJ et aucun message d'erreur.


----------



## zeltron54 (12 Juin 2020)

Chez moi je viens de tester, ça fonctionne !   ?
ton fichier s'appelle bien  "presentation.pdf" et il est bien au même endroit que ton fichier numbers ?

met ton code complet , que je puisse analyser ...?


----------



## digisi (12 Juin 2020)

zeltron54 a dit:


> Chez moi je viens de tester, ça fonctionne !   ?
> ton fichier s'appelle bien  "presentation.pdf" et il est bien au même endroit que ton fichier numbers ?
> 
> met ton code complet , que je puisse analyser ...?


Voila le code :

```
tell application "Finder"


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


    open chemin


    activate


    delay 3


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:"test", 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


                    


                    --Ajout pièces jointes


                    tell application "Finder"


                        set cheminPJ to ((path to home folder) & "documents:script mail:presentation.pdf") as string


                    end tell


                    set PieceJointe_list to {cheminPJ}


                    repeat with nbpj from 1 to count PieceJointe_list


                        


                        set mapj to item nbpj of PieceJointe_list as alias


                        tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph


                    end repeat


                    --Fin de l'ajout


                    


                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
```


----------



## zeltron54 (12 Juin 2020)

Je te remets le script a moi complet, qui fonctionne chez moi.

Ton script ci-dessus fonctionne également chez moi (non compris la gestion de plusieurs feuilles)


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

tell application "Numbers"
    set lafeuille to 1
    set CR to (ASCII character 13) -- initialise un retour ligne
    set nbmessage to 0
    set leslignes to 2 -- initialise le numéro de la première ligne des clients
    set lasuite to 1
    repeat
        tell table 1 of sheet lafeuille of document "liste.numbers" -- voir document numbers
            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
        end tell
        
        
        if nbmessage = 50 then exit repeat -- stop si 50 messages
        
        tell table 1 of sheet lasuite of document "liste.numbers" -- voir document numbers
            
            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 celsuite to "A" & (leslignes + 1) as string
            set suite to value of cell celsuite
            
            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
        end tell
        
        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:"test", 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
                
                --Ajout pièces jointes
                tell application "Finder"
                    set cheminPJ to ((path to home folder) & "documents:script mail:presentation.pdf") as string
                end tell
                set PieceJointe_list to {cheminPJ}
                repeat with nbpj from 1 to count PieceJointe_list
                    
                    set mapj to item nbpj of PieceJointe_list as alias
                    tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph
                end repeat
                
            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 lasuite of document "liste.numbers"
                set value of cell celtest to "X" -- renseigne numbers mail envoyé
                
                if suite = "fin" then
                    set lasuite to lasuite + 1
                    set leslignes to 1
                end if
                
            end tell
        end tell
        set leslignes to leslignes + 1 -- prépare numéro ligne suivante
    end repeat
    
    save front document
    quit
end tell
```


----------



## digisi (12 Juin 2020)

zeltron54 a dit:


> Je te remets le script a moi complet, qui fonctionne chez moi.
> 
> Ton script ci-dessus fonctionne également chez moi (non compris la gestion de plusieurs feuilles)
> 
> ...


je viens d'essayer avec ton script et même soucis la PJ n'est pas prise en compte.


----------



## zeltron54 (12 Juin 2020)

Tu as vérifié ou se trouve la PJ et son nom ?


----------



## digisi (12 Juin 2020)

zeltron54 a dit:


> Tu as vérifié ou se trouve la PJ et son nom ?


C'est le même chemin d'accès pour le listing numbers sauf que c'est presentation.pdf


----------



## zeltron54 (12 Juin 2020)

Alors je suis désolé, mais comme ça fonctionne chez moi je ne sais pas comment t'aider !


----------



## zeltron54 (13 Juin 2020)

Bonjour,

Après bien des recherches, j'ai fini par trouver ton problème. C'est une histoire de délai, le script envoyait le mail avant d'avoir fini d'y intégrer la pièce jointe, j'ai ajouté un délai de 1 seconde.
je te joins le nouveau script. tiens moi au courant !


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

tell application "Numbers"
    set lafeuille to 1
    set CR to (ASCII character 13) -- initialise un retour ligne
    set nbmessage to 0
    set leslignes to 2 -- initialise le numéro de la première ligne des clients
    set lasuite to 1
    repeat
        tell table 1 of sheet lafeuille of document "liste.numbers" -- voir document numbers
            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
        end tell
       
       
        if nbmessage = 50 then exit repeat -- stop si 50 messages
       
        tell table 1 of sheet lasuite of document "liste.numbers" -- voir document numbers
           
            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 celsuite to "A" & (leslignes + 1) as string
            set suite to value of cell celsuite
           
            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
        end tell
       
        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:"test", 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
               
                --Ajout pièces jointes
                tell application "Finder"
                    set cheminPJ to ((path to home folder) & "documents:script mail:presentation.pdf") as string
                end tell
                set PieceJointe_list to {cheminPJ}
                repeat with nbpj from 1 to count PieceJointe_list
                   
                    set mapj to item nbpj of PieceJointe_list as alias
                    tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph
                end repeat
                --fin ajout
            end tell
            delay 1
            send newMessage
            set nbmessage to nbmessage + 1 --compte le nombre de message envoyé
        end tell
        tell application "Numbers"
            tell table 1 of sheet lasuite of document "liste.numbers"
                set value of cell celtest to "X" -- renseigne numbers mail envoyé
               
                if suite = "fin" then
                    set lasuite to lasuite + 1
                    set leslignes to 1
                end if
               
            end tell
        end tell
        set leslignes to leslignes + 1 -- prépare numéro ligne suivante
    end repeat
   
    save front document
    quit
end tell
```


----------



## digisi (15 Juin 2020)

zeltron54 a dit:


> Bonjour,
> 
> Après bien des recherches, j'ai fini par trouver ton problème. C'est une histoire de délai, le script envoyait le mail avant d'avoir fini d'y intégrer la pièce jointe, j'ai ajouté un délai de 1 seconde.
> je te joins le nouveau script. tiens moi au courant !
> ...


Bonjour,

Effectivement je viens d'essayer le nouveau script et c'était un soucis de délai.
Question, est ce qu'il est possible de modifier la police ou la taille du "Bonjour" stp ?

Bonne journée,


----------



## zeltron54 (15 Juin 2020)

Bonjour,

Je t'avais mis ces possibilités dans le 1er script de ce post.

Il suffit d'ajouter, dans le bloc tell (NewMessage) les valeurs dans une boucle qui compte le nombres de caractères sur lequel appliquer.

Exemple: ton texte commence par "Bonjour" il y a donc 7 caractères à partir du début du texte, et tu veux mettre en "helvetica bold" et en taille "16". 

Le bloc tell devient: je te mets le bloc complet:


```
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
                
                --Ajout pièces jointes
                tell application "Finder"
                    set cheminPJ to ((path to home folder) & "documents:script mail:presentation.pdf") as string
                end tell
                set PieceJointe_list to {cheminPJ}
                repeat with nbpj from 1 to count PieceJointe_list
                    
                    set mapj to item nbpj of PieceJointe_list as alias
                    tell content of newMessage to make new attachment with properties {file name:mapj} at after last paragraph
                end repeat
                --fin ajout
                
                repeat with y from 0 to 7
                    set font of character (y) of content to "Helvetica Bold"
                    set size of character (y) of content to "16"
                end repeat
                
            end tell
            delay 1
```


----------



## digisi (15 Juin 2020)

zeltron54 a dit:


> Bonjour,
> 
> Je t'avais mis ces possibilités dans le 1er script de ce post.
> 
> ...


Merci pour ta réactivité !
Je viens de tester le script pour le moment ca marche vraiment bien la PJ s'insère parfaitement, seule chose qui varie avec cette modification c'est le délai entre les envois des mails (c'est un peu plus long). En revanche ça répond a une problématique c'est que je n'ai plus de mails en attente d'envoi


----------



## zeltron54 (15 Juin 2020)

Si tout fonctionne , content pour toi.

bonne journée.


----------

