# Aide sur un Apple script. Urgent !!



## dduke (28 Octobre 2010)

Bonjour,
J'ai récupéré un Apple script de zacromatafalgar (sur ce site, merci à lui)  qui grâce à une règle dans Mail, permet d'extraire les pièces jointes des mails reçus et les mets dans un dossier définit, en classant chaque pièce jointe par expéditeur. Cependant, j'ai un besoin légèrement différent, dans le sens ou j'ai besoin de placer ces PJ dans le dossier sans les classer du tout, en vrac. Je ne connais pas Apple scipt, j'ai essayé de modifier ce script mais je n'ai pas les compétences. Quelqu'un peut-il m'aider ? C'est urgent pour samedi !! Merci.


```
property thePath : (path to desktop as text) as string

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            set pathOk to my testFolder(thePath, "OXIII")
            repeat with eachMessage in theMessages
                set theSender to extract name from sender of eachMessage
                if (count of (mail attachments of eachMessage)) > 0 then
                    set destFolder to my testFolder(pathOk, theSender)
                    
                    repeat with PJ in mail attachments of eachMessage
                        set {name:theName} to PJ
                        set nameOk to my testFile(destFolder, theName)
                        try
                            save PJ in (destFolder as Unicode text) & nameOk
                        end try
                    end repeat
                end if
            end repeat
        end tell
    end perform mail action with messages
end using terms from

on testFile(destinationFolder, theName)
    set AppleScript's text item delimiters to "."
    set nameWithoutExt to text item 1 of theName
    set ext to text item 2 of theName
    set AppleScript's text item delimiters to ""
    try
        set i to ""
        set sep to ""
        (destinationFolder & nameWithoutExt & sep & i & "." & ext) as alias
        set sep to "&#8226;"
        repeat with i from 1 to 1000
            (destinationFolder & nameWithoutExt & sep & i & "." & ext) as alias
        end repeat
    end try
    return (nameWithoutExt & sep & i & "." & ext) as string
end testFile

on testFolder(leDoss, leNom)
    try
        (leDoss & leNom & ":") as alias
    on error
        do shell script "mkdir " & (quoted form of POSIX path of (leDoss & leNom))
    end try
    return ((leDoss & leNom & ":") as Unicode text)
end testFolder[COLOR=Silver]
[/COLOR]
```


----------



## dduke (28 Octobre 2010)

Bon, j'ai trouvé ça et ça fonctionne, ça sauvegarde bien toutes les pièces jointes de ma règle dans mail dans mon dossier o13mail. Seulement les fichiers de mêmes noms ne sont pas tranférés, peut être en les incrémentant ou quelque chose du genre? Est ce que quelqu'un peut me guider? (j'ai l'impression de me parler à moi même!!!!)


```
using terms from application "Mail"
    on perform mail action with messages The_Messages
        set save_Folder to my GetFolderName()
        tell application "Mail" to repeat with This_Message in The_Messages
            tell contents of This_Message
                if (count (mail attachments)) > 0 then
                    repeat with an_attachment in (get every mail attachment)
                        set att_save_file to save_Folder & (an_attachment's name)
                        save an_attachment in att_save_file
                    end repeat
                end if
            end tell
        end repeat
    end perform mail action with messages
end using terms from
to GetFolderName()
    return (path to desktop as text) & "o13mail:"
end GetFolderName
```


----------



## ceslinstinct (28 Octobre 2010)

dduke a dit:


> Bon, j'ai trouvé ça et ça fonctionne, ça sauvegarde bien toutes les pièces jointes de ma règle dans mail dans mon dossier o13mail. Seulement les fichiers de mêmes noms ne sont pas tranférés, peut être en les incrémentant ou quelque chose du genre? Est ce que quelqu'un peut me guider? (j'ai l'impression de me parler à moi même!!!!)


Bonjour

Si tu veut faire simple, et avoir tous tes mails classés par ordre d'arrivé dans le dossier tu ajoute un N° de 0 à 999 en préfix de chaque noms avant de les déplacer.

@+


----------



## dduke (28 Octobre 2010)

Bonjour, je ne comprends pas ta réponse.
Je ne veux pas déplacer mes mails manuellement, mais automatiser la sauvegarde des pièces jointes de chaque mail qui arrive sur un de mes comptes Mail vers un dossier o13mail sur le bureau, à l'aide d'un script lancé depuis une règle dans Mail ...


----------



## Anonyme (28 Octobre 2010)

Bonjour,



dduke a dit:


> Seulement les fichiers de mêmes noms ne sont pas tranférés, peut être en les incrémentant ou quelque chose du genre? Est ce que quelqu'un peut me guider?


Aussi, si le nom de l'attachement contient un *:* le fichier ne s'enregistrera jamais.

Voici le script modifié.

```
using terms from application "Mail"
	on perform mail action with messages The_Messages
		set save_Folder to my GetFolderName()
		tell application "Mail" to repeat with This_Message in The_Messages
			tell contents of This_Message
				if (count (mail attachments)) > 0 then
					repeat with an_attachment in (get every mail attachment)
						set tName to an_attachment's name
						if tName contains ":" then set tName to my replaceColon(tName)
						set att_save_file to my newFile(save_Folder, tName)
						save an_attachment in att_save_file
					end repeat
				end if
			end tell
		end repeat
	end perform mail action with messages
end using terms from

to GetFolderName()
	return (path to desktop as text) & "o13mail:"
end GetFolderName

on newFile(F, n)
	set AppleScript's text item delimiters to "."
	set nom to text item 1 of n
	set ext to ""
	try
		set ext to "." & text item 2 of n
	end try
	set AppleScript's text item delimiters to ""
	set i to 0
	set newName to nom
	try
		repeat
			(F & newName & ext) as alias
			set i to i + 1
			set newName to nom & " " & i
		end repeat
	end try
	return (F & newName & ext)
end newFile

on replaceColon(t)
	set ditd to text item delimiters
	set text item delimiters to ":"
	set t to text items of t
	set text item delimiters to "_"
	set t to t as string
	set text item delimiters to ditd
	return t
end replaceColon
```


----------



## dduke (29 Octobre 2010)

Super, ça fonctionne parfaitement ! Merci beaucoup de ton aide. Je vais vraiment m'y mettre à l'Apple script.


----------

