5 votos

¿Es posible componer Mac OS Mail en un editor externo?

Para Thunderbird existe la extensión External Editor, una pieza de software muy clásica que, cuando se llama a través de un acceso directo, hace aparecer tu editor externo (emacs en mi caso) y te permite editar tu correo allí. Mientras se edita, la ventana de redacción de Thunderbird se bloquea. Cuando el editor externo se cierra, la ventana de redacción se rellena con el texto actualizado del correo. Es muy conveniente tener tu correo como un buffer en tu emacs, por ejemplo para editar tablas, copiar resultados computacionales, usar funciones de edición potentes como regexp-búsqueda-y-reemplazo, etc.

Mi pregunta: ¿Es posible implementar lo mismo usando Mac OS Mail + AppleScript u otros trucos?

1voto

McAdam331 Puntos 111

Hace poco tuve mi primer Mac y me encontré con la misma situación en cuanto a mis hábitos de escritura de correo (usando Thunderbird con editor externo y vi en Linux). Hasta ahora, no he podido encontrar una respuesta adecuada. Así que empecé a buscar en Applescript.

Me gustaría introducir direcciones de correo o añadir archivos adjuntos en la ventana de composición de Apple Mail, mientras edito el cuerpo del mensaje en vi. Así, empiezo con una ventana de composición (ya sea para un nuevo correo o con una respuesta a otro correo) y cuando termino con las direcciones, cierro la ventana de composición y guardo el mensaje como borrador.

Con el siguiente Applescript script puedo entonces extraer las direcciones, el asunto y el cuerpo del mensaje en un archivo de texto y abrirlo con vi:

tell application "Mail"
        # Set global variables.
        set msgfilename to "/Users/me/Documents/message"
        set msgheaderdelimiter to linefeed & "#+#+#+#+#+#This line serves as delimiter for applescript.#+#+#+#+#+#" & linefeed
        set msgdraft to first item of messages of drafts mailbox

        # Open file to edit message.
        try
                set msgfile to open for access msgfilename with write permission
        on error number -49
                say "Error, file already open."
                close access msgfilename
                set msgfile to open for access msgfilename with write permission
        end try
        set eof msgfile to 0

        # Extract information from the message and write it to the file
        set msgrecipients to to recipients of msgdraft
        write "To: " to msgfile as «class utf8»
        repeat with rcp in msgrecipients
                set addr to address of rcp
                write addr to msgfile as «class utf8»
                write "," to msgfile as «class utf8»
        end repeat
        write linefeed & "CC: " to msgfile starting at -1 as «class utf8»
        set msgrecipients to cc recipients of msgdraft
        repeat with rcp in msgrecipients
                set addr to address of rcp
                write addr to msgfile as «class utf8»
                write "," to msgfile as «class utf8»
        end repeat
        write linefeed & "Subject: " to msgfile starting at -1 as «class utf8»
        set msgsubject to subject of msgdraft
        write msgsubject to msgfile starting at eof as «class utf8»
        set msgcontent to content of msgdraft
        write msgheaderdelimiter to msgfile as «class utf8»
        write msgcontent to msgfile starting at eof as «class utf8»
        close access msgfile
        delete msgdraft
end tell

# Start gvim with the prepared message file
do shell script "/usr/local/bin/gvim /Users/me/Documents/message"

Después de editar el cuerpo del mensaje, guardo el archivo de texto y cierro vi. Con el siguiente script, puedo abrir una nueva ventana de composición de mensajes con la información del archivo de texto:

tell application "Mail"
        # Set global variables.
        set fillinToAddresses to false
        set fillinCCAddresses to false
        set defaultDelimiters to AppleScript's text item delimiters
        set msgfilename to "/Users/me/Documents/message"
        set msgheaderdelimiter to linefeed & "#+#+#+#+#+#This line serves as delimiter for applescript.#+#+#+#+#+#" & linefeed

        # Open file to create outgoing message.
        set msgfile to open for access msgfilename
        set fields to read msgfile from 1 for 10000 using delimiter linefeed as «class utf8»
        # Extract To addresses
        set AppleScript's text item delimiters to " "
        set bufferarray to every text item of item 1 of fields
        if (count of bufferarray) = 2 then
                set AppleScript's text item delimiters to ","
                set msgtoaddresses to every text item of item 2 of bufferarray
                set fillinToAddresses to true
        end if
        # Extract CC addresses
        set AppleScript's text item delimiters to " "
        set bufferarray to every text item of item 2 of fields
        if (count of bufferarray) = 2 then
                set AppleScript's text item delimiters to ","
                set msgccaddresses to every text item of item 2 of bufferarray
                set fillinCCAddresses to true
        end if
        # Extract subject
        set AppleScript's text item delimiters to "Subject: "
        set bufferarray to every text item of item 3 of fields
        set msgsubject to item 2 of bufferarray as «class utf8»
        # Extract mail body
        set buffer1 to read msgfile from 1 for 10000 as «class utf8»
        set AppleScript's text item delimiters to msgheaderdelimiter
        set buffer2 to every text item of buffer1
        set msgbody to item 2 of buffer2

        # Create outgoing message object
        set newmsg to make new outgoing message
        tell newmsg
                if fillinToAddresses then
                        repeat with addr in msgtoaddresses
                                make new to recipient at end of to recipients with properties {address:addr}
                        end repeat
                end if
                if fillinCCAddresses then
                        repeat with addr in msgccaddresses
                                make new cc recipient at end of cc recipients with properties {address:addr}
                        end repeat
                end if
                set the subject to msgsubject
                set the content to msgbody
        end tell

        # Close file
        close access msgfile
end tell

Ahora, añadiría archivos adjuntos y enviaría el correo.

Evidentemente, sigue habiendo algunos puntos débiles: Siguen faltando los campos BCC y reply-to, pero se pueden añadir fácilmente. Un poco peor, los archivos adjuntos se pierden, cuando se pasa del compositor de mensajes a vi y viceversa. Sería deseable que la nueva ventana del compositor de mensajes se abriera automáticamente al cerrar el vi, sin tener que iniciar manualmente el script como en el caso anterior. Por lo tanto, no estoy completamente satisfecho con esto todavía, pero tal vez es un punto de partida donde algunos usuarios más avanzados pueden añadir mejoras.

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