Applescript para agregar el remitente del mensaje a un grupo específico en Contactos

0

Estoy tratando de configurar un Applescript para agregar el remitente de un mensaje seleccionado en Apple Mail a un grupo específico en la aplicación Contactos. Al reconfigurar la código proporcionado en esta respuesta , he desarrollado lo siguiente, pero no funciona. ¿Alguna sugerencia sobre lo que estoy haciendo mal?

    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
    
pregunta George C 13.11.2012 - 18:02

2 respuestas

3

Intenta esto, creará un contacto con el nombre, apellido y dirección de correo electrónico correctos:

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

Hubo algunos problemas con tu intento original, así es como trabajé alrededor de ellos.

  • Para empezar, selection le ofrece una lista de elementos (incluso si es solo una lista de uno), por lo que debe elegir el primer elemento de la selección.
  • En el correo, sender te da una cadena no muy útil con el nombre y el correo electrónico combinados. extract name from y extract address from le dan cadenas útiles.
  • La cadena de nombre es el nombre completo, pero Contacts.app espera nombres y apellidos separados, así que divido esa cadena (utilizando una función práctica encontrada here ) para hacer una estimación decente de los nombres y apellidos. Esto puede dar resultados inesperados de nombres con formatos extraños en los correos electrónicos.

Si tiene algún problema con este, avíseme y veré si puedo solucionarlo. En el futuro, puede ser útil ejecutar los scripts en el Editor de AppleScript y consultar el Registro de eventos para obtener información sobre los errores (los mensajes de error son útiles, aunque solo sea para ponerlos en Google o dar a otros un punto de partida para resolver su problema).

    
respondido por el robmathers 13.11.2012 - 19:15
0

Tengo una versión más extendida de esta idea que presenta una lista de grupos y te permite seleccionarla; También maneja múltiples mensajes. Puede agregar el remitente de varios mensajes diferentes a un solo grupo, o puede agregar uno o más remitentes a varios grupos.

Mi secuencia de comandos usa un método abreviado de teclado para agregar el remitente a tus Contactos: Cmd-Shift-Y (ejecutado por la secuencia de comandos, pero apuesto a que no sabías que había un método abreviado de teclado que hizo esto. Está en el Menú de mensajes cuando se selecciona un mensaje).

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
    
respondido por el Allen Watson 21.01.2013 - 00:19

Lea otras preguntas en las etiquetas