Applescript Mail Recup Pièce jointe

CathyGYM

Membre actif
28 Novembre 2010
160
1
Bonsoir,
Eh oui l'apprentissage du Mac et l'Applescript ne sont pas encore terminés pour moi, et j'ai encore une question...:D:D

Je cherche à écrire un script pour créer une règle de ma boite Mail. Toutes les semaines, je reçois un mail de même format contenant mon planning, et je souhaiterais récupérer la pièce jointe automatiquement dans un dossier spécifique. J'ai donc créé une nouvelle règle de ma boite Mail, qui exécute un script pour tous les mails issus d'un certain sender. Le problème c'est que le script ne fonctionne pas... J'ai pas encore tout compris !
Voilà le script, quelqu'un aurait-il une idée ? (j'ai mis en commentaire les premières et dernières lignes pour tester à partir de l'éditeur Applescript).

Bloc de code:
--using terms from application "Mail"
--on perform mail action with messages theMessages for rule ReglePlanning
tell application "Finder"
	set Mais to a reference to home
	set PathPlann to folder "Plannings" of folder "Documents" of Mais
end tell
tell application "Mail"
   set NombredeMessages to count the messages
   repeat with CeMessage in the messages
	set LeSujet to subject of CeMessage
	set LeSender to sender of CeMessage
	set LaDate to the week of the date received of CeMessage as string
	if ((LeSender is equal to "[email protected]") and (LeSujet contains "Planning Semaine")) then
           try
		set NomPieceJointe to the name of the first mail attachment of CeMessage
		if NomPieceJointe is equal to "Planning.pdf" then
			set LeNomFichier to PathPlann & NomPieceJointe & "-" & LaDate
			save first mail attachment of CeMessage in LeNomFichier
		end if
		display dialog "OK"
	   on error
		display dialog "Erreur"
	   end try
        end if
    end repeat
end tell
--end perform mail action with messages
--end using terms from

Question subsidiaire : faut-il enregistrer ce script en tant qu'application ou autre ?


Merci d'avance
 
Bonjour,
J'avais été confronté aux mêmes difficulltés il y a quelques temps.
Mon expérience :
1- ne pas faire appel à d'autres applications (supprime le "tell application "Finder"", les instructions qui sont dans ce bloc peuvent sans doute rester en l'état)
2- chez moi, le script est enregistré en tant que "script", et ça fonctionne
3- ce genre de script est "capricieux" : essaye de mettre le maximum de tests en tant que conditions dans la règle Mail (conditions sur le sujet et l'expéditeur par exemple) ce qui permettra d'avoir moins d'instructions dans le script, et donc moins d'occasions de plantage

Bon courage

Nicolas
 
Merci pour ces infos, je vais essayer de délester un maximum de commandes script, mais il me reste de toute façon au moins une erreur de syntaxe (sur "count the messages" et sur la boucle repeat). Apparemment, "the messages", ce ne doit pas être bon, mais je ne comprends pas pourquoi...
Quelqu'un a-t-il une idée sur cette partie ?
Merci
 
Bonjour

J'ai créé un dossier Pièces jointes dans Mail
J'ai fait une règle:

l'une des conditions suivante est remplie:

Une pièce jointe --- Contient .pps (pour moi)

Déplacer le message --- vers: Pièces jointes.

Ça fonctionne très bien (défaut, ce n'est pas signalé dans le Dock).


Sinon on les trouve dans le dossier Pièces jointes mais avec des noms genre 9446.emlx

@+
 
Merci pour ces infos, je vais essayer de délester un maximum de commandes script, mais il me reste de toute façon au moins une erreur de syntaxe (sur "count the messages" et sur la boucle repeat). Apparemment, "the messages", ce ne doit pas être bon, mais je ne comprends pas pourquoi...
Quelqu'un a-t-il une idée sur cette partie ?
Merci

Bonjour,

Essaye de remplacer :

set NombredeMessages to count the messages
repeat with CeMessage in the messages

par

repeat with CeMessage in theMessages

Cordialement,
Nicolas
 
Essaye de remplacer :

set NombredeMessages to count the messages
repeat with CeMessage in the messages

par

repeat with CeMessage in theMessages

Désolée j'ai mis un peu de temps à répondre, je n'avais pas le Mac sous la main...
J'ai essayé, mais celà ne marche pas, car dans ce cas il considère theMessages comme une variable qui n'est pas déclarée...
Merci quand même ;)
 
Bonjour,

Il faut enlever les tirets devant tes deux premières lignes (et les dernières), et tester le script appelé par une règle de Mail, pour que la variable theMessages soit effectivement déclarée,

Cordialement,
Nicolas
 
Bonjour,

1- Ne jamais mettre de dialogue dans un script qui fonctionne dans une règle de Mail, sinon le script ne fonctionnera jamais.

2- PathPlann est un chemin de type Finder, il n'est pas compatible avec Mail (message d'erreur), il faut le convertir en string.

3- week n'existe pas, je ne sais pas ce que tu veux obtenir d'une date, weekday permet d'obtenir la journée de la date en anglais.

4- Un script dans une règle de Mail ne donnera jamais d'erreur, il faut toujours le tester dans l'éditeur AppleScript avant.

Pour tester dans l'éditeur AppleScript c'est comme ceci :
Sélectionne un message qui contient un fichier-joint "Planning.pdf"
Exécute ce script :
Bloc de code:
tell application "Mail"
	set xx to selection
	tell me to perform mail action with messages xx
end tell

using terms from application "Mail"
	on perform mail action with messages theMessages
		tell application "Finder" to set PathPlann to (folder "Plannings" of folder "Documents" of home) as string
		
		repeat with CeMessage in theMessages
			set LeSujet to subject of CeMessage
			set LeSender to sender of CeMessage
			set LaDate to (the weekday of (get the date received of CeMessage))
			if ((LeSender is equal to "[email protected]") and (LeSujet contains "Planning Semaine")) then
				--try
				set fichier_joint to the first mail attachment of CeMessage
				set NomPieceJointe to the name of fichier_joint
				if NomPieceJointe is equal to "Planning.pdf" then
					set LeNomFichier to PathPlann & NomPieceJointe & "-" & LaDate
					save fichier_joint in LeNomFichier
				end if
				--end try
			end if
		end repeat
	end perform mail action with messages
end using terms from

Une fois que le script fonctionne sans erreur, remets les try et supprime les quatre premières lignes pour qu'il fonctionne à partir d'une règle.
 
Merci beaucoup Mac_Jac pour toutes ces infos. Je n'avais pas l'intention de laisser les "display dialog", et c'était effectivement pour tester à partir de l'éditeur applescript, mais le problème était que je ne mettais pas les quatre lignes du début... Maintenant çà marche beaucoup mieux :D:D

Concernant le "week", je cherchais le numéro de la semaine de l'année, car tous les plannings reçus en pièce jointe ont le même nom, et en plus je les reçois toujours le même jour de la semaine ! J'ai finalement utilisé "Date string" pour les distinguer les uns des autres... Si tu connais un moyen simple de trouver le numéro de la semaine, çà me ferait des noms un plus plus courts !

Par ailleurs, j'ai supprimé les tests sur l'expéditeur et sur le sujet que j'ai mis dans la règle mail directement, çà simplifie le script.

En tout cas encore merci à tous ceux qui ont participé à cette discussion...:up:

---------- Nouveau message ajouté à 10h40 ---------- Le message précédent a été envoyé à 10h11 ----------

Merci également Nicolas, tu avais raison pour deux lignes en commentaire, je les avais retirées pour tester dans l'éditeur, mais en fait ce n'était pas utile, il suffisait d'ajouter les 4 lignes données par Mac_Jac...
 
Concernant le "week", je cherchais le numéro de la semaine de l'année, car tous les plannings reçus en pièce jointe ont le même nom, et en plus je les reçois toujours le même jour de la semaine ! J'ai finalement utilisé "Date string" pour les distinguer les uns des autres... Si tu connais un moyen simple de trouver le numéro de la semaine, çà me ferait des noms un plus plus courts !

Bonjour

Regarde si une de ces lignes peu être utile.

Bloc de code:
-- Affichage du N° de la semaine dans l'année (Le premier jour de la semaine est le Lundi)
set numSemaine to (do shell script "date '+%V'")

-- N° du jour dans l'année (001 - 365 où 366)
set numJour to (do shell script "date '+%j'")

display dialog "Semaine n°: " & numSemaine & return & "Jour dans l'année: " & numJour as string

@+
 
Merci Ceslinstinct, j'ai testé, çà fonctionne, mais pour la date du jour. Comme j'avais des fichiers à récupérer avec des dates plus anciennes, je me suis fait une petite procédure qui calcule le numéro de la semaine du jour de réception. Par contre, pour les mails à venir, je vais pouvoir utiliser ta fonction.
 
Merci Ceslinstinct, j'ai testé, çà fonctionne, mais pour la date du jour. Comme j'avais des fichiers à récupérer avec des dates plus anciennes, je me suis fait une petite procédure qui calcule le numéro de la semaine du jour de réception. Par contre, pour les mails à venir, je vais pouvoir utiliser ta fonction.
Bonjour,
Je remercie les contributeurs ci-dessus. Ayant eu un besoin apparenté plus simple je me suis permis de vous faire part de mon adaptation. Mon besoin consiste à enregistrer la pièce jointe de un ou plusieurs messages Mail dans un répertoire fixé dans le code ( une ligne de code à changer pour le mettre ailleurs que dans Desktop/monRepertoireCible).
Le déclenchement du script est assuré par une règle de Mail mais les conditions suivantes sont nécessaires pour le débuguer sous l'éditeur:
- Placer le code du script.scpt ci dessous dans /Users/moi/Library/Application Scripts/com.apple.mail
- Enlever la mise en commentaire des 4 premières lignes
- Sélectionner dans Mail un message contenant la pièce jointe à sauvegarder dans monRepertoireCible
- Lancer le script depuis l'éditeur de script
- Réaffecter ce script à une règle de détection de l'adresse de l'émetteur et de l'objet du message reçu par exemple.

La forme ci-dessous est celle du lancement sous règle Mail.

-- Sous editeur de script sélectionner dans Mail le(s) messages avec pièce jointe avant de lancer le script

-- Mettre en commentaires les 4 lignes ci-dessous pour fonctionner sous l'appel d'une règle de mail

--tell application "Mail"

-- set xx to selection

-- tell me to perform mail action with messages xx

--end tell


using terms from application "Mail"

on perform mail action with messages theMessages

-- localiser ci-dessous le répertoire cible "monRepertoireCible"

tell application "Finder" to set PathRepertoireCible to (folder "monRepertoireCible" of (path to desktop)) as string

-- pour chacun des messages selectionnés, extraire la premiere piece jointe et l'enregistrer dans le répertoire "monRepertoireCible" dans le type d'origine du fichier joint

repeat with CeMessage in theMessages

-- extraire le nom du fichier joint

set fichier_joint to the first mail attachment of CeMessage

set NomPieceJointe to the name of fichier_joint

-- composer le path long du fichier dans son répertoire cible

set LeNomFichier to PathRepertoireCible & NomPieceJointe

-- remarque: le save ci-dessous ne duplique pas le fichier dans le repertoire cible si l'opération a déjà été faite

save fichier_joint in file LeNomFichier

end repeat

end perform mail action with messages

end using terms from
 
Dernière édition:
Je relance le topic

J'ai essayé ce script dans l'éditeur applescript, mais il ne se passe rien. Pas de message d'erreur.
je suis sur Mac 10.11.6 + Editeur de Script 2.8.1 + Mail 9.3
Avant de l'adapter à mes besoins, j'aimerais que votre solution fonctionne.
je n'ai pas besoin de vérifier l'expéditeur mais j'aurais besoin que le nom du fichier joint, quelqu'il soit, soit renommé.

merci de votre aide.
Pascal
 
Bonjour,
Je remercie les contributeurs ci-dessus. Ayant eu un besoin apparenté plus simple je me suis permis de vous faire part de mon adaptation. Mon besoin consiste à enregistrer la pièce jointe de un ou plusieurs messages Mail dans un répertoire fixé dans le code ( une ligne de code à changer pour le mettre ailleurs que dans Desktop/monRepertoireCible).
Le déclenchement du script est assuré par une règle de Mail mais les conditions suivantes sont nécessaires pour le débuguer sous l'éditeur:
  • Placer le code du script.scpt ci dessous dans /Users/moi/Library/Application Scripts/com.apple.mail
  • Enlever la mise en commentaire des 4 premières lignes
  • Sélectionner dans Mail un message contenant la pièce jointe à sauvegarder dans monRepertoireCible
  • Lancer le script depuis l'éditeur de script
  • Réaffecter ce script à une règle de détection de l'adresse de l'émetteur et de l'objet du message reçu par exemple.

La forme ci-dessous est celle du lancement sous règle Mail.

-- Sous editeur de script sélectionner dans Mail le(s) messages avec pièce jointe avant de lancer le script

-- Mettre en commentaires les 4 lignes ci-dessous pour fonctionner sous l'appel d'une règle de mail

--tell application "Mail"

-- set xx to selection

-- tell me to perform mail action with messages xx

--end tell


using terms from application "Mail"

on perform mail action with messages theMessages

-- localiser ci-dessous le répertoire cible "monRepertoireCible"

tell application "Finder" to set PathRepertoireCible to (folder "monRepertoireCible" of (path to desktop)) as string

-- pour chacun des messages selectionnés, extraire la premiere piece jointe et l'enregistrer dans le répertoire "monRepertoireCible" dans le type d'origine du fichier joint

repeat with CeMessage in theMessages

-- extraire le nom du fichier joint

set fichier_joint to the first mail attachment of CeMessage

set NomPieceJointe to the name of fichier_joint

-- composer le path long du fichier dans son répertoire cible

set LeNomFichier to PathRepertoireCible & NomPieceJointe

-- remarque: le save ci-dessous ne duplique pas le fichier dans le repertoire cible si l'opération a déjà été faite

save fichier_joint in file LeNomFichier

end repeat

end perform mail action with messages

end
using terms from
Bonjour,
Je rajoute qu'il est nécessaire, au préalable, d'aller dans les réglages sécurité & confidentialité / Accès complet au disque et de donner la permission à l'application mail. Sinon erreur d'écriture du fichier...