Applescript per aggiungere il mittente del messaggio a un gruppo specifico in Contatti

0

Sto cercando di impostare un oggetto Applescript per aggiungere il mittente di un messaggio selezionato in Apple Mail a un gruppo specifico nell'app Contatti. Riconfigurando codice fornito in questa risposta , ho lavorato su quanto segue ma non funziona. Qualche suggerimento su cosa sto facendo male?

    tell application "Mail"
    set theMessage to selection
    tell application "Contacts"
        set theGroup to "_TEST"
    end tell
    set theSender to sender of theMessage
    tell application "Contacts"
        set theName to name of theSender
        set thePerson to make new person with properties {first name:name of theSender}
        add thePerson to theGroup
    end tell
    tell application "Contacts" to save
    end tell
    
posta George C 13.11.2012 - 18:02
fonte

2 risposte

3

Prova questo, creerà un contatto con nome, cognome e indirizzo email corretti:

tell application "Mail"
set theMessages to selection
if theMessages is not {} then -- check empty list
    set theSenderName to extract name from sender of item 1 of theMessages
    set nameArray to my split(theSenderName, " ")
    set theFirstName to item 1 of nameArray
    set theLastName to last item of nameArray
    set theEmail to extract address from sender of item 1 of theMessages

    tell application "Contacts"
        set theGroup to group "_TEST"
        set thePerson to make new person with properties {first name:theFirstName, last name:theLastName}
        make new email at end of emails of thePerson with properties {label:"Work", value:theEmail}
        add thePerson to theGroup
        save
    end tell
    end if
end tell

on split(theString, theDelimiter)
    set oldDelimiters to AppleScript's text item delimiters
    set AppleScript's text item delimiters to theDelimiter
    set theArray to every text item of theString
    set AppleScript's text item delimiters to oldDelimiters
    return theArray
end split

Ci sono stati alcuni problemi con il tuo tentativo originale, ecco come ho lavorato intorno a loro.

  • Per i principianti, selection ti fornisce un elenco di elementi (anche se è solo un elenco di uno), quindi devi scegliere il primo elemento dalla selezione.
  • Nella posta, sender ti dà una stringa non molto utile con il nome e l'e-mail combinati. extract name from e extract address from ti danno stringhe utili.
  • La stringa nome è il nome completo, ma Contacts.app si aspetta nomi e cognomi separati, quindi ho diviso quella stringa (usando una funzione utile trovata here ) per fare una discreta supposizione al primo e all'ultimo nome. Ciò potrebbe dare risultati imprevisti da nomi stranamente formattati nelle e-mail.

Se hai problemi con questo, fammelo sapere e vedrò se riesco a risolverli. In futuro, potrebbe essere utile eseguire gli script in AppleScript Editor e controllare il registro eventi per i dettagli su ciò che non funziona (i messaggi di errore sono utili, se non altro per mettere in Google o dare ad altri un punto di partenza per risolvere il problema).

    
risposta data 13.11.2012 - 19:15
fonte
0

Ho una versione più estesa di questa idea che presenta un elenco di gruppi e ti consente di selezionarli; gestisce anche più messaggi. Puoi aggiungere il mittente di diversi messaggi a un singolo gruppo oppure puoi aggiungere uno o più mittenti a più gruppi.

Il mio script usa una scorciatoia da tastiera per aggiungere il mittente ai tuoi Contatti: Cmd-Shift-Y (eseguito dallo script, ma scommetto che non sapevi che c'era una scorciatoia da tastiera che faceva questo !! È nel Menu dei messaggi quando viene selezionato un messaggio).

tell application "Mail" to set theSelection to selection
  if theSelection is {} then return beep 2
  if length of theSelection = 1 then
    set thePrompt to "Select the group(s) to which to add the sender of the selected message."
  else
    set thePrompt to "Select the group(s) to which to add the senders of the selected messages."
  end if
tell application "Contacts" to set theList to name of groups
set R to choose from list theList with prompt thePrompt with multiple selections allowed
if R is false then return

tell application "Mail"
    activate
    set theSenders to {}
    repeat with thisMessage in theSelection
        set theSender to extract name from sender of thisMessage
        copy theSender to the end of theSenders
    end repeat
    tell application "System Events" to keystroke "y" using {shift down, command down}
end tell

tell application "Contacts"
    activate
    repeat with thisSender in theSenders
        delay 0.1
        set thePersons to (people whose value of emails contains (thisSender as text))
        if (count thePersons) = 1 then
            repeat with theGroupName in items of R
                add (item 1 of thePersons) to group theGroupName
            end repeat
        else
            repeat with theGroupName in items of R
                repeat with thisPerson in thePersons
                    add thisPerson to group theGroupName
                end repeat
            end repeat
        end if
    end repeat
    save
    set selected of group theGroupName to true
    tell application "System Events" to keystroke "0" using {command down}
end tell
    
risposta data 21.01.2013 - 00:19
fonte

Leggi altre domande sui tag