Applescript Mail AddressBook

CathyGYM

Membre actif
28 Novembre 2010
160
1
Bonjour,
J'essaies de créer une règle mail qui récupère automatiquement le nom et l'adresse de l'expéditeur d'un mail ayant un objet bien défini. J'ai donc sélectionné les mails répondant au bon critère dans la règle mail, pour çà aucun problème. Puis j'ai écrit un script qui extrait le nom et l'adresse mail de l'expéditeur, et s'il n'est pas encore dans mon carnet d'adresse, je souhaites l'y ajouter et le mettre dans un groupe existant. Voici le code :
Bloc de code:
using terms from application "Mail"
	--on perform mail action with messages theMessages for rule NewUserAppli
	on perform mail action with messages theMessages
		repeat with CeMessage in theMessages
			--try
			set LeSender to the sender of CeMessage
			set TheName to (extract name from the sender of CeMessage)
			set TheAdress to (extract address from the sender of CeMessage)
			tell application "Address Book"
				set PersonnePres to (every person in group "AppliMac" whose name is TheName)
				if PersonnePres is {} then
					set ThePerson to make new person in group "AppliMac" with properties {name:TheName, email:TheAdress}
					save
				end if
			end tell
			--end try
		end repeat
	end perform mail action with messages
end using terms from
L'extraction du nom et de l'adresse se passe bien, mais çà plante à la création du nouveau contact. En fait, tout ce qui est après "tell application address book" plante. Cela fait un moment que je tourne en rond sur ce problème, alors si quelqu'un a une idée... Merci d'avance :siffle:
 
Bonjour,

name est une propriété en lecture seulement, il faut utiliser last name et first name.
Pour le savoir, dans le dictionnaire AppleScript du carnet --> name (text, r/o) : r/o ça veut dire read only


Pour l'adresse, à chaque nouvelle personne créée, il faut créer l'adresse et spécifier le nom du label.
Pour les personnes existantes dans le carnet, il faut vérifier l'existence des adresses avant.

email est une classe, une sous-classe de person.
contact info est une sous-classe de email, ses propriétés sont id, label et value
Bloc de code:
tell application "Address Book"
				set PersonnePres to (every person in group "AppliMac" whose name is TheName)
				if PersonnePres is {} then
					if (count (words of TheName)) > 1 then
						set prenom to word 1 of TheName
						set TheName to text ((length of prenom) + 2) thru -1 of TheName
					else
						set prenom to ""
					end if
					set ThePerson to make new person at end of people of group "AppliMac" with properties {last name:TheName, first name:prenom}

					tell ThePerson to make new email with properties {label:"home", value:TheAdress}
					save -- save addressbook
				end if
			end tell
 
Merci beaucoup Mac_Jac pour cette réponse aussi rapide. Ca fonctionne très bien à un détail près... Il semblerait que le test que j'avais mis pour savoir si la personne était déjà présente dans mon carnet d'adresse (groupe "AppliMac"), ne fonctionne pas... Par contre quand je l'enlève, tout va bien, sauf que mon carnet se remplit de doublons !
La syntaxe de ce test est elle correcte ? :confused:
Bloc de code:
	set PersonnePres to (every person in group "AppliMac" whose name is TheName)
	if PersonnePres is {} then

Merci d'avance :zen:
 
Bonsoir,

Oui , tout est correct, je l'avais testé, sauf la commande save ne fait rien , save addressbook est la commande à utiliser sur OS X 10.5.8 ou moins.

Voici ce qu'il faut faire pour debuger le script avec l'historique de l'éditeur.

Ajoute ces lignes au début du script avant using terms from application "Mail"
Bloc de code:
tell application "Mail"
	set x to selection
	tell me to perform mail action with messages x
end tell
Sélectionne un message dans Mail, exécute le script dans l'éditeur, vérifie l'historique
 
Merci Mac_Jac,
J'ai snow leopard, donc la commande save fonctionne bien... et les quatre lignes de test y sont bien, mais je n'arrive pas à tester si le contact à ajouter est déjà dans le carnet d'adresse (dans le groupe "AppliMac"). La conséquence, c'est que les contacts s'empilent avec un grand nombre de doublons... :D

---------- Nouveau message ajouté à 21h28 ---------- Le message précédent a été envoyé à 21h14 ----------

Petite précision, dans la fenêtre évènement, l'execution s'arrête sur
"get every person of group "AppliMac" whose name = "NOM" et après plus rien...
ou plutôt si après un certain temps :"erreur dans Address Book : Délai dépassé pour un AppleEvent" number -1712

Or la personne que j'ai sélectionnée n'étant pas dans le groupe, il devrait l'ajouter.
Lorsque je vire le test, l'ajout du contact se fait normalement. :cool:
 
[/COLOR]Petite précision, dans la fenêtre évènement, l'execution s'arrête sur
"get every person of group "AppliMac" whose name = "NOM" et après plus rien...
ou plutôt si après un certain temps :"erreur dans Address Book : Délai dépassé pour un AppleEvent" number -1712

OK, cela semble être un bogue de Address Book sur Snow.

Essaie ceci, pour voir si ça fonctionne
Bloc de code:
tell application "Address Book"
	set thesenames to (name of people of group "AppliMac")
	if TheName is in thesenames then
Ou il y a une fiche de corrompue, essaie sur un nouveau groupe
 
Bonjour,

Je me permet de déterrer ce post car ce script m'intéresse beaucoup : @CathGYM pourrais tu redonner le code complet du script qui marche chez toi svp ? Je n'arrive pas à le faire tourner de mon coté ...

Merci d'avance, ça m'aiderait pas mal :)