1 votos

Los AppleScripts para crear Eventos del Calendario no funcionan en Catalina

Tengo una serie de AppleScripts que son activados por las reglas de Mail.app. Funcionaban perfectamente (y aún lo hacen) en mi antiguo iMac con High Sierra, pero ahora tengo un nuevo iMac con Catalina en el que ya no funcionan.

Un ejemplo de script es el que aparece a continuación, que extrae algunos detalles del correo electrónico y luego crea un evento de Calendario que contiene esos detalles y añade un par de alarmas al evento.

-- Triggered by Mail rule.
using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            repeat with theMessage in theMessages
                try
                    set msgsubject to subject of theMessage
                    set msgcontent to content of theMessage
                    set msgid to message id of theMessage
                    set {amount, dueon} to my parseMsg(msgcontent)
                    my createEvent(msgsubject, msgid, amount, dueon)
                end try
            end repeat
        end tell
    end perform mail action with messages
end using terms from

-- Parse the email content to extract invoice details.
on parseMsg(msgcontent)
    set amount to extractBetween(msgcontent, "Invoice for", "due by")
    set dueon to extractBetween(msgcontent, "due by", "Review")
    return {amount, dueon}
end parseMsg

-- Extract the substring from between two strings
to extractBetween(theString, startText, endText)
    set tid to AppleScript's text item delimiters
    set AppleScript's text item delimiters to startText
    set startComps to text items of theString
    set AppleScript's text item delimiters to endText
    set endComps to text items of second item of startComps
    set AppleScript's text item delimiters to tid
    return trim(first item of endComps)
end extractBetween

-- Trim all whitespace from start and end of a string
on trim(theString)
    set theChars to {" ", tab, character id 10, return, character id 0, character id 8232}
    repeat until first character of theString is not in theChars
        set theString to text 2 thru -1 of theString
    end repeat
    repeat until last character of theString is not in theChars
        set theString to text 1 thru -2 of theString
    end repeat
    return theString
end trim

-- Create a calendar event for the specified invoice.
on createEvent(msgsubject, msgid, amount, dueon)
    set startdate to (current date) + 28 * days
    set sentdate to current date
    -- set enddate to startdate
    tell application "Calendar" to tell calendar "Invoices"
        set theEvent to make new event with properties {start date:startdate, summary:"Check " & msgsubject, allday event:true}
        delay 5
        set description of theEvent to amount & return & "Due on: " & dueon & return & "Sent on: " & sentdate
        delay 5
        set url of theEvent to "message:" & "%3c" & msgid & "%3e"
        delay 10
        tell theEvent
            -- Add a email alarm
            make new mail alarm at end of mail alarms with properties {trigger interval:10}
            delay 10
            make new sound alarm at end of sound alarms with properties {trigger interval:370, sound name:"Sosumi"}
        end tell
    end tell
end createEvent

La siguiente regla de Mail.app activa el script enter image description here

También he habilitado el acceso al Calendario para Mail.app en el Panel de Privacidad de las Preferencias del Sistema. enter image description here

La regla intenta ejecutarse, ya que veo que aparece un pequeño icono de un engranaje en la barra de menú y se abre la aplicación Calendar.app, pero el evento del calendario no se añade. Como digo, esto funciona perfectamente en High Sierra. También tengo un AppleScript correspondiente que elimina las alarmas del Calendario cuando se recibe un correo electrónico alternativo. De nuevo este funciona en High Sierra pero tampoco funciona en Catalina.

¿Alguien tiene alguna idea?

Gracias, Alan.

0 votos

Le sugiero que pruebe su código en script Editor para que puedas atravesarlo. Obviamente tendrás que usar el tell application "Mail" en un contexto un poco diferente. Comentar temporalmente el on perform mail action with messages theMessages for rule theRule línea de código y sólo set theMessages a un solo mensaje , luego un par de mensajes para ver dónde está el resto de código está fallando.

0 votos

Gracias, pensé en probarlo en script Editor pero no estoy seguro de cómo apuntar a un correo electrónico específico desde el propio script si no está siendo activado por una regla de correo?

1voto

Alan Cole Puntos 1

Bien, he hecho algunos cambios para poder ejecutar el script en scriptEditor (dándole a las variables cadenas de texto plano en lugar de extraerlas del correo electrónico).

Cuando ejecuto el script obtengo el siguiente error: error "El calendario tiene un error: No se puede obtener el calendario "Facturas"." número -1728 de calendario "Facturas"

Eso me da una pista, supongo, aunque el Calendario al que debería añadirse el evento sí existe en mi aplicación de Calendario. ¿Podría ser algo relacionado con las comillas alrededor de "Calendario" y "Facturas" en la siguiente línea del script?

tell application "Calendar" to tell calendar "Invoices"

0 votos

Creo que lo he solucionado con: decirle a la aplicación "Calendario" que le diga al calendario ("Facturas")

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X