43 votos

¿Cómo enviar un correo electrónico desde la línea de comandos?

¿Cómo enviar un correo electrónico desde la línea de comandos o script? Quiero poder ejecutar el script programáticamente pasando el receptor y el mensaje.

0 votos

Si estás escribiendo un programa, muchos lenguajes tienen bibliotecas que se ocupan del correo electrónico

28voto

moodforaday Puntos 2633

Hay dos programas que conozco que le permitirán fácilmente configurar su Mac para enviar correo electrónico desde la línea de comandos.

He escrito CÓMOs para ambos:

De los dos, sugiero msmtp .

La configuración es lo suficientemente complicada como para no estar seguro de si debo replicar todos los pasos aquí, pero mencionaré que si usas Homebrew puede instalar msmtp utilizando

brew install msmtp --with-macosx-keyring

A continuación, el resto es sólo una cuestión de establecer los archivos de configuración relacionados

La primera es /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

Tenga en cuenta que tls_trust_file debe apuntar a donde haya descargado e instalado los certificados https://www.thawte.com/roots/index.html .

Puse el mío en ~/Dropbox/Thawte Roots para poder tenerlo en todos mis Macs.

Entonces necesitas un ~/.mailrc para decir dónde se encuentra el binario de msmtp. Si utiliza brew será /usr/local/bin/msmtp para que el archivo se vea así:

set sendmail="/usr/local/bin/msmtp"

El último pero crucial paso es asegurarse de que su llavero tiene la información exactamente en el formato que msmtp espera:

Creo que eso cubre la mayoría de los detalles. Véase http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ si quieres más detalles.

0 votos

Obviamente mis ejemplos en el script anterior asumen que estás usando Gmail, pero puede ser usado para otros servidores también. Cambiar example@gmail.com a tu dirección de correo electrónico de Gmail o Google Apps.

0 votos

Finalmente pude conseguir que esto funcione mediante el uso de las root de Google disponibles aquí: pki.google.com/roots.pem . Si tienes problemas con el archivo de confianza y Gmail, esto puede desbloquearte.

1 votos

Si tienes problemas con la ubicación del archivo de configuración (msmtprc), después de instalarlo con Homebrew en MacOS 10.13.3, msmtp lo buscó en mi directorio home: ~/.msmtprc

25voto

Ross Goddard Puntos 2565

mail -s subject someone@example.com escriba su mensaje, pulse Ctrl+D para terminar

21 votos

Si no ha configurado su sistema para indicarle dónde enviar el correo electrónico, es probable que en realidad no lo envíe, sino que se acumule en mi Mac.

26 votos

-1: Esta respuesta está incompleta. A menos que el sistema se configuró antes de ejecutar este comando, como @TJLuoma señaló, este comando no funcionará.

3 votos

TJ Luoma y melvkim son incorrectos: un sistema OS X estándar enviará correo electrónico sin problemas y sin necesidad de configuración. La máquina OS X actuará como su propio servidor SMTP, buscando el DNS MX para el dominio de destino y enviando el correo allí.

18voto

johneyt54 Puntos 21

La forma más básica de enviar correo es a través de una sesión telnet con el servidor smtp de su proveedor/red. Después de contactar con el servidor y después de cada comando, el servidor responderá si acepta el comando con algo como "250 OK", o si no con un mensaje de error.

Todos los detalles se pueden encontrar en el RFC2821 - Simple Mail Transfer Protocol, búsquelo en Google. Esta forma básica es genial para probar por qué algo va mal enviando el correo, pero creo que es bastante complicado scribirlo a prueba de todo.

Primero obtenga una interfaz de línea de comandos en su ordenador, iniciando Terminal. A continuación, continúe con los siguientes comandos, uno tras otro.

Abra una sesión de telnet en el puerto 25 del servidor smtp de su proveedor/red

telnet name_or_ip_of_smtp_server 25

diga hola más el nombre de Internet de su proveedor/red, como abc.com

EHLO name_of_your_network

se necesita una dirección from=return, los < y > forman parte del comando

MAIL FROM:<your_email_adress>

dar uno o varios destinos, los < y > forman parte del comando

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

indicar al servidor que se quiere empezar a enviar datos

DATA

ahora el servidor debe responder que puede comenzar a enviar su correo y pasa al modo de datos

your data
more data
etc

ahora termina los datos con un punto como único carácter en una línea

.

el servidor vuelve al modo comando para que puedas salir

QUIT

16voto

Adithya Holla Puntos 13

Esto me funcionó, fue escrito con Lion en mente pero funciona para Mountain Lion. Btw esto es el uso de Gmail por lo que si no está...

No es necesario descargar nada. (sólo tienes que configurar una cuenta de gmail)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Configurar Postfix para Gmail SMTP Editar el archivo /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

y añadir lo siguiente debajo de los relayhosts comentados :-

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes

Generar sasl_password si no existe ya

sudo vim /etc/postfix/sasl_passwd

e introduzca lo siguiente:-

[smtp.gmail.com]:587 username@gmail.com:password

Ejecute los siguientes comandos

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

Y ya está hecho .
Ahora, debería poder enviar correos electrónicos desde la línea de comandos, por ejemplo, para enviar el contenido de un directorio como un árbol a una dirección de correo electrónico

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

0 votos

PD: Conseguí que esto funcionara muy bien cuando lo ejecutaba manualmente desde Terminal o en scripts. Sin embargo en este punto estoy atascado con el problema de que los correos nunca se envían cuando launchd lanza el scripts. Supongo que es un problema con la configuración del trabajo de launchd.

0 votos

Lo tengo funcionando. Ver apple.stackexchange.com/preguntas/92406/

0 votos

+1 Gracias por añadir esto. Me ha ayudado mucho. Todo lo que realmente necesitaba era la entrada relayhost en main.conf (es mi propio servidor SMTP en mi LAN).

0voto

PBR Puntos 36

mtcmail es otra opción: http://www.macupdate.com/app/mac/33505/mtcmail-cli .

[Ignora este texto adicional. Añadido porque: el cuerpo debe tener al menos 30 caracteres; usted ha introducido 27].

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