Usando Raspbian y Ubunntu 16.04 LTS, necesito una solución genérica de Linux.
El requisito es simple:
Necesito una forma de enviar mensajes de correo electrónico de una línea desde la línea de comandos.
He configurado una cuenta de gmail solo para este Rpi3 en particular, con la dirección de [email protected], sin 2FA
Así que ahora necesito poder enviar mensajes de correo de una línea desde cualquier lugar (incluido cron) sin intervención del usuario.
También me gustaría poder enviar archivos de texto; básicamente, cualquier cosa de stdin
.
Respuestas:
La respuesta más simple para enviar mensajes de una línea a través de gmail es usar ssmtp
Instálalo con los siguientes comandos:
Editar
/etc/ssmtp/ssmtp.conf
para verse así:Envíe una línea como esta:
o
Luego, fiel a * nix, solo obtienes el aviso en unos segundos.
Verifique su cuenta [email protected], y listo, ¡está ahí!
Esto también funciona bien al enviar un archivo, así:
Y el programa aparecerá en el buzón
Si el archivo es un archivo de texto, puede tener una primera línea que dice
Subject: xxxxxx
Esto se puede usar con varios trabajos cron y puede enviarme datos con líneas de asunto que indican el contenido.
Esto funcionará con cualquier cosa que prepare un mensaje que se canaliza a ssmtp a través de stdin.
Para obtener más detalles, como proteger estos archivos contra otros usuarios, visite este artículo:
Enviar correo electrónico desde la línea de comandos de Raspberry Pi
Asegúrese de mirar también a continuación la respuesta publicada
Rui
acerca del bloqueo de laFROM:
dirección que podría modificarse en los archivos de mensajes formateados, si es necesario.Ahora, si solo pudiera descubrir cómo enviar SMS de la misma manera.
fuente
ssmtp
en mis máquinas virtuales, muy ligero. +1sendmail
solo no tiene el MTA - Agente de transporte de correo para comunicarse fuera de la máquina. Por defecto, dado que Unixen es multiusuario por diseño,sendmail
enviará mensajes a otros usuarios en el mismo cuadro pero no fuera.ssmtp
es el MTA que creo que es más sencillo de configurar para gmail.ssmtp
es solo uno de los muchos envoltorios de Sendmail. Todos estos aceptan un mensaje en la entrada estándar y, opcionalmente, una lista de direcciones como argumentos de línea de comandos, y todos ofrecen un nombre binariosendmail
que implementa (al menos las características básicas de) la API tradicional de línea de comandos Sendmail. Pero hablando correctamente, ese mensaje debe ser un mensaje RFC822 bien formado. Como mínimo, debe tener unSubject:
encabezado.(Con
ssmtp
,sendmail
es solo un enlace simbólico assmtp
. Postfix, Exim, y creo que cualquier otro MTA queProvides: mail-transport-agent
tenga una disposición similar, excepto, por supuesto,sendmail
donde elsendmail
binario es "lo real").Más comúnmente, puede armar un mensaje de correo electrónico simple con un documento aquí.
(La
-t
opción Sendmail dice que tome la lista de destinatarios de los encabezados del mensaje que recibe en la entrada estándar. La ruta precisa a Sendmail diferirá entre las plataformas).Otra variación común es combinar la salida de algunos comandos. Tenga cuidado de tener una línea vacía (un "cuello") entre los encabezados y el cuerpo del mensaje.
Para cualquier cosa más allá de los mensajes de texto ASCII muy simples, debe comprender cómo redactar un mensaje MIME adecuado, momento en el que generalmente tiene más sentido usar una herramienta como
mutt
. Algunas plataformas tienen unmail
omailx
que sabe cómo enviar archivos adjuntos y texto que no es ASCII, pero esto no es totalmente portátil.El desafío aquí no es encontrar un cliente que pueda tomar un mensaje de correo electrónico e intentar enviarlo, es configurarlo para los detalles específicos de Gmail, lo que requiere que el MTA conozca el nombre de usuario y la contraseña para usar en el servidor remoto. para poder usarlo como el smarthost saliente.
Detrás de escena, a la mayoría de los clientes les gusta
mutt
,mailx
etc., normalmente solo se ejecutansendmail
detrás de escena para sacar el mensaje del sistema.fuente
Agregando al OP propia respuesta:
Al configurar
ssmtp
, también puede prohibir o permitir que los usuarios definan From, y también anular el dominio; es posible que desee hacerlo por varias razones, incluido el mensaje que no cae en la carpeta Spam.Puedes agregar a
/etc/ssmtp/ssmtp.conf
:Tenga en cuenta que si bien YES se puede usar en una frambuesa casera, es posible que no sea aconsejable en un sistema multiusuario desde el punto de vista de la seguridad.
fuente
¿Qué hay de malo con el "correo"?
"mail" es / etc / enlace alternativo a / usr / bin / bsd-mailx del paquete bsd-mailx. Creo que está ahí por defecto. Gran utilidad para enviar correo desde scripts cron, por ejemplo.
Funciona también en Ubuntu y FreeBSD.
fuente
mailx
es solo un front end. Requiere que se configure algo de MTA para que el mensaje salga del sistema local. Existen múltiples versiones incompatibles de uso común, aunque si su plataforma de destino es solo Debian, puede confiar en un comportamiento BSD razonablemente reciente.Estoy realmente interesado en usar
mailx
esto:fuente
-a
opción en particular sería maravillosa si fuera universalmente compatible, pero solo examine lasmailx
preguntas aquí para ver que ciertamente este no es el caso.Utilizo sendEmail para enviar correos electrónicos automáticos simples a través del servidor SMTP de un proveedor externo:
Paso todo en una línea, por lo que hacer esto en una línea de comando probablemente muestre todos los parámetros (incluida la contraseña smtp) a todos los usuarios, si se ejecutan un
ps -ef
tiempo, estoy ejecutando el comando. Lo uso dentro de un script de shell.fuente
Mi servidor es CEntOS 7 y tiene sendmail pero no mailx, etc. En lugar de instalar un nuevo programa, probé usando sendmail directamente y descubrí que esto funciona:
Para mí, esta parece ser la forma más sencilla de enviar un correo electrónico corto, ya que no requiere ejecutar o configurar un servidor o demonio, y puede hacerse en una sola línea de comando.
La idea es que un mensaje simplemente me alertará de que cierto programa arrojó un error, sin revelar ninguna información potencialmente confidencial, y luego enviaré SSH al servidor para inspeccionar sus registros. De esta manera, no hay necesidad de molestarse con complicaciones como adjuntar archivos o cifrar el transporte.
Notas:
-e
le dice a echo que interprete '\ n' y otros escapes.-t
le dice a sendmail que obtenga las direcciones de los destinatarios de 'Para:' en el encabezado del mensaje.tail /var/log/maillog
para ver mensajes de error.fuente
sendmail
, pero no veo esta respuesta que demuestre que funciona con gmail como se especifica en la pregunta original ...