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

29

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

michelemarcon
fuente
Si está escribiendo un programa, muchos idiomas tienen bibliotecas que se ocupan del correo electrónico
usuario151019

Respuestas:

22

mail -s subject [email protected] escribe tu mensaje, presiona Ctrl+Dpara terminar

vartec
fuente
11
Si no ha configurado su sistema para que le diga dónde enviar un correo electrónico, es probable que en realidad no lo envíe, simplemente se acumulará en mi Mac.
TJ Luoma
15
-1: esta respuesta está incompleta. A menos que el sistema se haya configurado antes de ejecutar este comando, como señaló @TJLuoma, este comando no funcionará.
melvynkim
1
TJ Luoma y melvkim son incorrectos: un sistema OS X estándar listo para usar enviará un correo electrónico sin problemas, 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í.
JohnEDee
2
@patrix, Correcto, utiliza el nombre de usuario largo de la cuenta conectada y la dirección ".local" autogenerada de la Mac para formar un "De". Lo uso todo el tiempo para enviarme correos electrónicos de notificación a mí y a mi personal desde procesos con script de shell. Sin embargo, TJ Luoma y melvkim decían que "no funcionará" y "en realidad no enviará un correo electrónico", los cuales son incorrectos.
JohnEDee
1
@RamarajT, sí, puede canalizar la salida del comando echo al correo, y luego no requerirá un Cmd-D. Por ejemplo: echo This will be the body of the email | mail -s "This is the Subject" [email protected]
JohnEDee
26

Conozco dos programas que le permitirán configurar fácilmente su Mac para enviar correos electrónicos desde la línea de comandos.

He escrito COMO para los dos:

De los dos, sugiero msmtp.

La configuración es lo suficientemente complicada que no estoy seguro de si debería replicar todos los pasos aquí, pero mencionaré que si usa Homebrew , puede instalar msmtp usando

brew install msmtp --with-macosx-keyring

Luego, el resto es solo una cuestión de configurar los archivos de configuración relacionados

El primero 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 la tls_trust_filelínea debe apuntar a donde haya descargado e instalado los certificados de https://www.thawte.com/roots/index.html .

Puse el mío ~/Dropbox/Thawte Rootspara poder tenerlo en todos mis Mac.

Luego necesita un ~/.mailrcarchivo para decir dónde se encuentra el binario msmtp. Si lo usa brew, /usr/local/bin/msmtpel archivo se verá así:

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

El último pero crucial paso es asegurarse de que su Llavero tenga la información exactamente en el formato que msmtp esperará:

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

TJ Luoma
fuente
Obviamente, mis ejemplos en el script anterior suponen que está utilizando Gmail, pero también se puede usar para otros servidores. Cambie [email protected]a su dirección de correo electrónico de Gmail o Google Apps.
TJ Luoma
Finalmente pude hacer que esto funcionara utilizando las raíces de Google disponibles aquí: pki.google.com/roots.pem . Si tiene problemas con el archivo de confianza y Gmail, esto puede desbloquearlo.
codewise
Si tiene problemas con la ubicación del archivo de configuración (msmtprc), después de instalar con Homebrew en macOS 10.13.3, msmtp lo buscó en mi directorio de inicio: ~/.msmtprc
codewise
15

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 al 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 RFC2821 - Protocolo simple de transferencia de correo, Google para ello. Esta forma básica es excelente para probar por qué algo sale mal al enviar correo, pero creo que es bastante complicado escribir una prueba completa.

Primero obtenga una interfaz de línea de comandos en su computadora, iniciando Terminal. Luego continúe con los siguientes comandos, uno tras otro.

Abra una sesión 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, las <y> son parte del comando

MAIL FROM:<your_email_adress>

dar uno o más destinos, los <y> son parte del comando

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

dígale al servidor que desea comenzar a enviar datos

DATA

ahora el servidor debería responder, puede comenzar a enviar su correo y pasar al modo de datos

your data
more data
etc

ahora termine los datos con un punto como solo char en una línea

.

el servidor vuelve al modo de comando para que pueda salir

QUIT
Henry vM
fuente
13

Esto funcionó para mí, fue escrito con Lion en mente pero funciona para Mountain Lion. Por cierto, esto está usando Gmail, así que si no estás ...

¡No necesitas descargar nada! (solo configura una cuenta de gmail)

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

Configurar Postfix para el archivo de edición SMTP de Gmail /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

y agregue lo siguiente debajo de los host de retransmisión 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
smtp_sasl_mechanism_filter = plain

Genere sasl_password si aún no existe

sudo vim /etc/postfix/sasl_passwd

e ingrese 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 terminaste ...
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
Jonny
fuente
PD: Obtuve que esto funciona muy bien cuando lo ejecuto manualmente desde Terminal o en scripts. Sin embargo, en este punto, estoy atrapado con el problema de que los correos nunca se envían cuando launchd inicia el script. Supongo que es un problema con la configuración del trabajo de launchd.
Jonny
Lo tengo funcionando. Ver apple.stackexchange.com/questions/92406/…
Jonny
+1 Gracias por agregar esto. Realmente me ayudó. Todo lo que realmente necesitaba era la entrada de host de retransmisión en main.conf (es mi propio servidor SMTP en mi LAN).
boot13
3
Lo anterior puede estar desactualizado. Tuve que agregar "smtp_sasl_mechanism_filter = plain" según stackoverflow.com/a/26451135/197789 para que funcione. De lo contrario, recibí un error de "falla genérica".
Von
0

Es posible que desee consultar postfixconf que habilita y configura OS X para enviar correos electrónicos desde la línea de comandos (utilizando su entrada).

Se basa en la configuración de postfix que están bien documentados en la web aquí , aquí y aquí .

rublo
fuente
-3

Como está basado en Unix, puede usar el comando sendmail .

Pierre Watelet
fuente
-1: sendmail es el comando del servidor SMTP
vartec