Creando un script contenedor para Mail.app para enviar correo desde la Terminal

Estoy tratando de enviar correo desde la terminal con la ayuda de bash y applescript. Uso bash para encargarme de los argumentos y el cuerpo del mensaje de correo electrónico. Luego intenté usar Applescript para enviar el correo con Mail.app. Sin embargo, me he encontrado con algunos problemas, cuando intento lo siguiente, obtengo:4:4: syntax error: Expected expression but found end of script. (-2741)

#!/bin/bash

if [ $# -ne 2 ]
then
    echo "Arguments: <subject> <recipient>" >&2 #stderr
    exit 1
fi

read message

applescript="
tell application \"Mail\"
    set theMessage to make new outgoing message with properties {visible:true, subject:${1}, content:${message}, address:${2}}
    send theMessage
end tell
"

# send the message
osascript -e ${applescript}

Versión actualizada:

#!/bin/bash

if [ $# -ne 2 ]
then
    echo "Arguments: <subject> <recipient>" >&2 #stderr
    exit 1
fi

read message

echo "tell application \"Mail\"
    set theEmail to make new outgoing message with properties {visible:true, subject:\"${1}\", content:\"${message}\"}
    tell theEmail
        make new recipient at end of to recipients with properties {address:\"${2}\"}
        send theEmail
    end tell
end tell" | osascript

Respuestas (2)

También puede consultar esta publicación de superusuario . La respuesta aceptada proporciona un script bash que utiliza AppleScript para enviar un correo electrónico con un archivo adjunto desde una línea de comando de Terminal. Este script puede tener más funciones de las que necesita, pero es un excelente punto de partida. El código de la respuesta:

#!/bin/bash
echo "tell application \"Mail\"
    activate

    set MyEmail to make new outgoing message with properties {visible:true, subject:\"$2\", content:\"Some Message Here\"}
    tell MyEmail
        make new to recipient at end of to recipients with properties {address:\"$1\"}
        make new attachment with properties {file name:((\"$3\" as POSIX file) as alias)}
    end tell
end tell
" | osascript
Gracias. Hacer eco de la cadena en osascript eliminó el error.

¿Necesita usar Mail.app o su objetivo es solo enviar un mensaje de correo electrónico? Si es solo para enviar un mensaje de correo electrónico desde la Terminal, puede usar la utilidad de línea de comandos sendemail .

/usr/local/bin/sendemail 
 -f from@my.email.com 
 -t my.recipient@their.email.com 
 -s your.smtp.server:port 
 -xu smtp.username.here 
 -xp smtp.password.here 
 -m message.body.goes.here

Obviamente, en la Terminal, todo eso deberá ir en una sola línea, con los escapes apropiados y las comillas de cadena. Puede consultar la página del manual de sendemail para obtener más opciones.

Gracias Ash. He pensado en otras opciones como enviar correo electrónico, pero no me gusta la idea de almacenar los detalles de inicio de sesión en texto sin formato. Después de buscar en Google, descubrí que hay algunas opciones disponibles para usar el llavero para autenticar, pero siempre existe la posibilidad de una configuración incorrecta, etc. Fue entonces cuando pensé, hey, ya tengo un cliente de correo electrónico autenticado: Mail.app, si pudiera escribir eso.
Buen punto, @foo, debería haber mencionado los detalles de inicio de sesión de texto sin cifrar en mi publicación. Eso también me hizo pensar, pero estoy usando mi script para enviar correos electrónicos de ToDo a Wunderlist usando una cuenta desechable de Gmail. No me importa si esa cuenta está comprometida. Me alegro que hayas encontrado la solución al problema.