Envoyer un mail au format HTML avec Safari et AppleScript

Il est possible de partager par Mail une page avec Safari avec la commande «menu Fichier ➜ Partager ➜ Envoyer cette page  I» et ensuite, d'ajouter les destinataires dans Mail. Mais il n'est pas possible d'ajouter les destinataires par AppleScript au nouveau message ainsi créé.

Voici un script permettant de créer un message stylé dont le corps est une page HTML à partir d'une URL ou d'un fichier local en spécifiant une liste de destinataires.

Fonctionnement

Le script ouvre une page HTML locale ou présente sur un site web, en copie le contenu, crée le message avec le sujet, les destinataires et l'émetteur, et colle ensuite le contenu de la page dans le texte du message.

Entre Mac OS 10.10 et 10.11 le comportement de Mail sous Applescript a changé !

Script pour El Capitan   Ouvrir le script dans l'Éditeur

(*  CONSTANTES À ADAPTER AU CONTEXTE

Version pour El Capitan

mails et noms-prénoms des destinataires *)

set addressList to {"destinataire1@domaine.fr", "destinataire2@domaine.fr"}

set nameList to {"premier destinataire", "second destinataire"}

(* nom du compte expéditeur du message : si vide ou invalide : compte par défaut *)

set theAccount to "Orchidées"

(* message html : mettre isHTML à true, sinon le mettre à false en passant un texte dans textBody *)

set isHTML to true -- indique que le corps est en html

set textBody to ""

set theReturnedItems to (display dialog "Page servant de corps de texte du message :" default answer "http://" buttons {"Ouvrir un fichier", "Annuler", "OK"} default button 3)

set the button_pressed to the button returned of theReturnedItems

set the theURL to the text returned of theReturnedItems

if the button_pressed is equal to "OK" then

else if the button_pressed is equal to "Ouvrir un fichier" then

set the theURL to the POSIX path of (choose file with prompt "Ouvrir un fichier :")

else

error number -128

end if

(* détermine s'il s'agit d'une URL ou du path d'un fichier local, car commande open de Safari différente *)

set isURL to (text 1 thru 4 of theURL = "http")


(* ouvre Safari pour extraire le texte HTML du message *)

tell application "Safari"

activate

make new document at beginning of documents

if isURL then

open location theURL -- URL

else

open theURL -- fichier local

end if

delay 1

set textSubject to name of current tab of window 1 -- <title> de la page

tell application "System Events"

(* copie le texte stylé de la page *)

keystroke "a" using command down

delay 0.5

keystroke "c" using command down

delay 0.5

end tell

close current tab of window 1

end tell


tell application "Mail"

activate

--  fabrique le Sender d'après le nom du compte : Nom Prénom <adresse mail>

try

set FullAccountName to full name of account theAccount as string

set AccountAdress to email addresses of account theAccount as string

set FullAccountName to FullAccountName & " <" & AccountAdress & ">"

on error

set FullAccountName to "" -- sera émis par le compte par défaut

end try

set refMessage to make new outgoing message with properties {sender:FullAccountName, subject:textSubject, visible:true}

tell refMessage

if not isHTML then

set content to textBody -- alimenter dans ce cas textBody

end if

repeat with i from 1 to count nameList

make new to recipient at end of to recipients with properties {name:item i of nameList, address:item i of addressList} -- ajoute chaque destinataire

end repeat

save

end tell

end tell

if isHTML then

(* colle le texte stylé dans le corps de message *)

tell application "Mail"

activate

tell application "System Events"

tell window 1 of process "Mail"

repeat until focused of UI element 1 of scroll area 1

keystroke tab

end repeat

keystroke "v" using command down

end tell

end tell

end tell

end if

Script pour Yosemite Ouvrir le script dans l'Éditeur

(*  CONSTANTES À ADAPTER AU CONTEXTE

Version pour Yosemite

mails et noms-prénoms des destinataires *)

set addressList to {"destinataire1@domaine.fr", "destinataire2@domaine.fr"}

set nameList to {"premier destinataire", "second destinataire"}

(* nom du compte expéditeur du message *)

set theAccount to "Orchidées" -- si vide ou invalide : compte par défaut


set theReturnedItems to (display dialog "Page servant de corps de texte du message :" default answer "http://" buttons {"Ouvrir un fichier", "Annuler", "OK"} default button 3)

set the button_pressed to the button returned of theReturnedItems

set the theURL to the text returned of theReturnedItems

if the button_pressed is equal to "OK" then

else if the button_pressed is equal to "Ouvrir un fichier" then

set the theURL to the POSIX path of (choose file with prompt "Ouvrir un fichier :")

else

error number -128

end if

(* détermine s'il s'agit d'une URL ou du path d'un fichier local, car commande open de Safari différente *)

set isURL to (text 1 thru 4 of theURL = "http")


(* ouvre Safari pour extraire le texte HTML du message *)

tell application "Safari"

activate

make new document at beginning of documents

if isURL then

open location theURL -- URL

else

open theURL -- fichier local

end if

delay 1

set textBody to source of document 1 --    HTML avec quotes échappées

set textSubject to name of current tab of window 1 -- <title> de la page

close document 1

end tell


tell application "Mail"

set isHTML to true -- indique que le corps est en html

activate

--  fabrique le Sender d'après le nom du compte : Nom Prénom <adresse mail>

try

set FullAccountName to full name of account theAccount as string

set AccountAdress to email addresses of account theAccount as string

set FullAccountName to FullAccountName & " <" & AccountAdress & ">"

on error

set FullAccountName to "" -- sera émis par le compte par défaut

end try

(* Génération du message en mode invisible, sinon HTML ne marche pas *)

set refMessage to make new outgoing message with properties {sender:FullAccountName, subject:textSubject, visible:false}

tell refMessage

if isHTML then

set html content to textBody -- indique que c'est le texte html

else

set content to textBody

end if

repeat with i from 1 to count nameList

make new to recipient at end of to recipients with properties {name:item i of nameList, address:item i of addressList} -- ajoute chaque destinataire

end repeat

save

close

end tell

end tell

2 février 2016