Envoi de mail avec pièce jointe en Applescript

Kerdaven

Membre confirmé
26 Juin 2023
36
0
49
Bonjour,

J'essaye de créer un applescript qui enverra un mail avec pièce jointe avec l'application Outlook (je ne souhaite pas utiliser mail).

J'ai adapté ce bout de code trouvé sur le net mais rien ne se passe hormis la demande de sélectionner la PJ et le destinataire.

Le but est ensuite d'inclure dans automator et créer une action qui me permettra d'envoyer rapidement un fichier par clic droit dessus puis choix dans la liste des actions.

Merci pour vos conseils et aide !

Voici le code :


set mailBody to "Test contenu mail"

set theAttachmentFile to choose file with prompt "fichier lié"
set lefichier to theAttachmentFile as string

set mailAdress to text returned of (display dialog "Mail Adress" default answer "" buttons {"OK"} default button 1) as string

set whichFile to file
tell application "Finder" to set whichFile to selection
repeat with aFile in whichFile
tell application "Microsoft Outlook"
set filename to name of aFile
set theNewMessage to make new outgoing message with properties {subject:"TEST " & filename, content:mailBody}
make new recipient at theNewMessage with properties {email address:{address:mailAdress}}
set theAttachmentFile to aFile as POSIX file
make new attachment at the end of theNewMessage with properties {file:theAttachmentFile}
send theNewMessage



end tell
end repeat
 
Bonjour,

Essai avec ça.
Pense à remplacer : "[email protected]" par la bonne adresse
remplacer "Sujet" par l'objet
remplacer "Contenu" par le texte de ton mail

Bloc de code:
-- envoi mail avec outlook et ajoute la pièce jointe
set PJ1 to choose file with prompt "Sélectionner le fichier à envoyer"

tell application "Microsoft Outlook"
    activate
    set newMessage to make new outgoing message with properties {subject:"Sujet", content:"Contenu"}
    tell newMessage
        set toaddresslist to {"[email protected]"}
        repeat with i from 1 to count toaddresslist
            make new to recipient at end of to recipients with properties {email address:{address:item i of toaddresslist}}
        end repeat
        
        set attachmentlist to {PJ1}
        make new attachment at end of attachments with properties {file:attachmentlist}
    end tell
    
    send newMessage
end tell
 
Hello @zeltron54 !
J'ai modifié le script pour le lancer en action de dossier sous automator et cela fonctionne.

Par contre si je veux :
  • ajouter plusieurs pièces jointes
  • lister dans le corps du mail les noms de ces PJ

comment faire ? car le "input" dans les actions Photoshop est un élément unique non ?

merci pour ton avis
 
Pour ajouter plusieurs PJ, suivant ton mode de sélection, tu les ajoutes dans une variable liste, puis tu fais une boucle qui les ajoute dans le mail du style:
Bloc de code:
set attachmentlist to {PJ1} & {PJ2}
       
        repeat with i from 1 to count attachmentlist
            make new attachment at end of attachments with properties {file:item i of attachmentlist}
        end repeat

Pour les lister dans le corps, tu récupères leurs noms dans les variables de tes sélections , et les ajoutes dans "content: xxx"
 
bonsoir,
Si tu n'as pas encore résolu le problème voici le script mis à jour.
Au lancement il de demande de sélectionner les pièces jointes(sélections multiples possible)
Il crée la liste des pièces jointes, séparer par des virgules (je n'ai pas réussi à mettre des retours ligne, outlookne les prend pas en compte !).
Puis il crée le mail et l'envoi.
Pense a modifier l'adresse destinataire, le sujet, et éventuellement ajouter du texte à la liste des PJ.

Bloc de code:
-- envoi mail avec outlook et ajoute les pièces jointes
set listePJ to choose file with prompt "Sélectionner les fichiers à envoyer" multiple selections allowed yes

set nb to count item of listePJ
tell application "Finder"
    set listenomPJ to "liste des pièces jointes :    "
    repeat with i from 1 to nb
        set nom to name of (item i of listePJ)
        set listenomPJ to listenomPJ & nom & "   ,   "
    end repeat
end tell


tell application "Microsoft Outlook"
    activate
    set newMessage to make new outgoing message with properties {subject:"Sujet", content:listenomPJ}
    tell newMessage
        set toaddresslist to {"[email protected]"}
        repeat with i from 1 to count toaddresslist
            make new to recipient at end of to recipients with properties {email address:{address:item i of toaddresslist}}
        end repeat
        
        repeat with i from 1 to nb
            make new attachment at end of attachments with properties {file:item i of listePJ}
        end repeat
    end tell
    send newMessage
end tell
 
Bonjour,
après quelques recherches sur le net, voila la solution pour lister les PJ avec des retours à la ligne...
J'y ai ajouté une ligne exemple pour y inclure du texte !
Bloc de code:
-- envoi mail avec outlook et ajoute les pièces jointes
set listePJ to choose file with prompt "Sélectionner les fichiers à envoyer" multiple selections allowed yes

set nb to count item of listePJ
tell application "Finder"
    set listenomPJ to "liste des pièces jointes :" & return
    repeat with i from 1 to nb
        set nom to name of (item i of listePJ)
        set listenomPJ to listenomPJ & nom & return
    end repeat
end tell

--ligne exemple pour ajout texte
set listenomPJ to listenomPJ & return & "Veuillez trouver le résultat du travail en PJ sus nommées" & return & "Cordialement."

tell application "Microsoft Outlook"
    activate
    set newMessage to make new outgoing message with properties {subject:"Sujet", plain text content:listenomPJ}
    tell newMessage
        set toaddresslist to {"[email protected]"}
        repeat with i from 1 to count toaddresslist
            make new to recipient at end of to recipients with properties {email address:{address:item i of toaddresslist}}
        end repeat
      
        repeat with i from 1 to nb
            make new attachment at end of attachments with properties {file:item i of listePJ}
        end repeat
    end tell
    send newMessage
end tell
 
Dernière édition:
Hello @zeltron54 merci beaucoup !
Absorbé par mes recherches sur comment installer php je n'avais pas eu le temps de chercher...

En plus visiblement je cherchais mal en essayant de faire une boucle For i... qui n'existe pas en applescript ;(

je teste et reviens vers toi !

encore merci
 
Bonjour,

J'ai testé mais pas de sauts de ligne..
Voici le corps du mail : liste des pièces jointes : update_mini-05.csv TEST_ENVOI.xlsx Veuillez trouver le résultat du travail en PJ sus nommées Cordialement.

J'ai ajouté des "&return" supplémentaires mais sans résultat.

Il n'y a pas une histoire de balises <> à intégrer dans le texte pour qu'elles soient interprétées comme des retours à la ligne ?

Merci
 
Bonjour,

Outllok traite le corps du texte en html donc il faudrait intégrer les balises.
Mais j'ai mis le dernier script, qui lui demande d'interpréter le texte en temps que texte brut et chez moi cela fonctionne...
mais je suis sur "mojave" avec la dernière version dispo pour outlook qui est la 16.54 (21101001)
Tu as bien essayé avec le dernier script
la ligne qui change est:
Bloc de code:
set newMessage to make new outgoing message with properties {subject:"Sujet", plain text content:listenomPJ}

"Plain text" pour lui dire texte brut.
 
Avec le script ci-dessus voila ce que j'obtient !
Capture d’écran 2023-07-06 à 11.31.24.png
peut être un problème de préférences "composition" voila les miennes, mais faut peut être changer...

Capture d’écran 2023-07-06 à 12.11.07.pngCapture d’écran 2023-07-06 à 12.11.22.png
 
Dernière édition:
Si vraiment tu ne trouves pas, alors inclus les balises HTML pour les saut de ligne.
Le même script avec balise HTML devient:

Bloc de code:
-- envoi mail avec outlook et ajoute les pièces jointes
set listePJ to choose file with prompt "Sélectionner les fichiers à envoyer" multiple selections allowed yes

set nb to count item of listePJ
tell application "Finder"
    set listenomPJ to "liste des pièces jointes :" & " <br>"
    repeat with i from 1 to nb
        set nom to name of (item i of listePJ)
        set listenomPJ to listenomPJ & nom & " <br>"
    end repeat
end tell

--ligne exemple pour ajout texte
set listenomPJ to listenomPJ & " <br>" & "Veuillez trouver le résultat du travail en PJ sus nommées" & " <br>" & "Cordialement."

tell application "Microsoft Outlook"
    activate
    set newMessage to make new outgoing message with properties {subject:"Sujet", content:listenomPJ}
    tell newMessage
        set toaddresslist to {"[email protected]"}
        repeat with i from 1 to count toaddresslist
            make new to recipient at end of to recipients with properties {email address:{address:item i of toaddresslist}}
        end repeat
        
        repeat with i from 1 to nb
            make new attachment at end of attachments with properties {file:item i of listePJ}
        end repeat
    end tell
    send newMessage
end tell
 
Bonsoir,

Je n'ai précisé, si tu envois ton mail depuis une action en faisant une sélection multiple de fichiers puis clic droit et action rapide, il faut modifier le script:

en supprimant la ligne:
Bloc de code:
set listePJ to choose file with prompt "Sélectionner les fichiers à envoyer" multiple selections allowed yes

en la remplaçant par :

Bloc de code:
set listepj to input as list

Lors de sa première utilisation le système risque de te demander d'autoriser à accéder à outlook.
 
Bonjour,

J'ai regardé les préférences sur ma machine, je n'ai pas les mêmes choix que toi et il n'y a plus deux onglets distincts HTML et TEXTE

J'ai coché les choix que nous avons en commun, sans résultat.

J'ai mis avec les balises HTML mais elles ne sont pas interprétées et je les récupère en tant que telles dans mon corps de mail ;)

liste des pièces jointes : <br>BLOQUANT_A_RELIVRER.xlsx <br>images_ko.txt <br>update_CQ-06072023.csv <br> <br>Veuillez trouver le résultat du travail en PJ sus nommées <br>Cordialement.
 
Tu as bien cocher "rédiger les messages au format html par défault"

Voir si un redémarrage de la machine n'améliore pas les choses .
Eventuellement , pour savoir ou chercher, faire un essai dans une autre session (invité par exemple) pour voir si cela provient des préférences de ton compte.