¿Mailx envía correo utilizando un relé SMTP o se conecta directamente al servidor SMTP de destino?

30

Supongamos que envío un correo usando el siguiente comando:

mailx [email protected]

luego mailx primero intenta averiguar el servidor SMTP de mi ISP para retransmitir el correo o se conecta directamente. ¿Depende de si mi PC tiene una dirección IP pública o está detrás de un NAT? ¿Cómo verifico la configuración de mailx en mi PC? ¿Cómo puedo verificar esto usando tcpdump?

Rohit Banga
fuente

Respuestas:

29

Tradicionalmente, Unix maily sus derivados (y muchas otras herramientas de Unix) usan la /usr/bin/sendmailinterfaz, provista por casi todos los agentes de transferencia de correo (MTA: postfix, exim, courier y, por supuesto, sendmail).

Es decir, el mailprograma no habla ningún protocolo de red: alimenta el mensaje a sendmailtravés de stdin y le permite manejar la entrega real. (Esto se remonta a los días en que algunos correos usaban SMTP, algunos usaban UUCP, algunos usaban BITNET ...)

Una vez que se envía un mensaje a la cola sendmail, el MTA maneja la transmisión real del mensaje, ya sea a través de SMTP u otra cosa. Dependiendo de la configuración, puede conectarse directamente al MTA de destino o retransmitir correo a través de otro host (también llamado smarthost).

La conexión directa es más común en los servidores; la retransmisión a través de smarthost es más común en computadoras personales en conexiones domésticas: la retransmisión a través de su cuenta de correo electrónico de Gmail o ISP / trabajo es esencial para evitar los filtros antispam "IP dinámicos".

(Algunos MTA como esmtpo nullmailerestán diseñados específicamente para usuarios domésticos y siempre usan un host de retransmisión. Estos no son compatibles con la recepción de correo y son mucho más ligeros en recursos).

mailx → [/ usr / bin / sendmail] → cola MTA local → [SMTP] → MTA del destinatario → bandeja de entrada del destinatario
mailx → [/ usr / bin / sendmail] → cola MTA local → [SMTP] → Gmail o ISP / servidores de trabajo → [SMTP] → MTA del destinatario → bandeja de entrada del destinatario

Otros programas, en su mayoría clientes gráficos fáciles de usar, como Thunderbird o Outlook, siempre se conectan directamente a un servidor SMTP de retransmisión / smarthost (nuevamente, generalmente Gmail o servidor SMTP ISP / work), que transmite el mensaje en su nombre.

El soporte SMTP nativo está presente en heirloom-mailx, pero no en el tradicional bsd-mailx.

aplicación → [SMTP] → Gmail o ISP / servidores de trabajo → [SMTP] → destinatario MTA → bandeja de entrada del destinatario

El tercer método, conectarse directamente al servidor del destinatario, casi nunca se usa, y ningún MUA lo admite. En las computadoras personales, su uso provocará que su mensaje sea rechazado (se envía una gran cantidad de correo no deseado desde las direcciones IP de los usuarios domésticos infectados).

aplicación → [SMTP] → destinatario MTA → capturado por el filtro de spam
Gravedad
fuente
1
¿Cómo encontrar mi MTA en Linux?
Rohit Banga
1
@iamrohitbanga 1) Verifique la lista de paquetes instalados. (No todas las distribuciones vienen con un MTA por defecto)
Grawity
1
@iamrohitbanga 2) Ya respondí eso. Outlook a menudo se usa en una computadora personal en el hogar, y muchos servidores de correo rechazan los mensajes recibidos de las direcciones de los usuarios domésticos (debido a la alta tasa de spam de esos). Es por eso que se necesita transmitir a través de un servidor corporativo.
Grawity
1
@iamrohitbanga 3) "o" significa "cualquiera de", no "ambos". Aquellos que usan Gmail como su cuenta de correo principal envían correo a través de los servidores de Gmail. Quienes tienen un buzón en su ISP usan los servidores de su ISP.
Grawity
1
@iamrohitbanga 4) Eso es porque mailx no usa el "tercer método". Utiliza un MTA como se describe en la parte superior de mi respuesta. Y una vez más, si no tiene una conexión a Internet corporativa, es muy probable que se descarte el correo enviado directamente desde su PC (sin relé).
Grawity
31

mailx puede usar SMTP. Su archivo de configuración es ~ / .mailrc

Un ejemplo es mailx usando el SMTP de Gmail .

La configuración puede incluso estar en un comando:

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://smtp.gmail.com:587 \
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
-S smtp-auth-user=$FROM_EMAIL_ADDRESS \
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ \
$TO_EMAIL_ADDRESS

Si se usa un servidor SMTP normal, es mucho más fácil (vea una introducción detallada aquí ):

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp=smtp://smtp.example.com
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
$TO_EMAIL_ADDRESS

También puede ponerlos en el archivo de configuración de mailx ~ / .mailrc

ericzma
fuente
Tenga en cuenta que esto depende de heirloom-mailx, que no es el mailx predeterminado.
Scott
@ Scott: Sí. Pero depende de la distribución de Linux. En algunos sistemas, el valor predeterminado no es la herencia (por ejemplo, Ubuntu: fclose.com/b/linux/1411/… . Parece que hay 3 versiones de mailx). En algunos otros, como Fedora, OpenSUSE, el predeterminado es la "característica enriquecida" "heirloom-mailx".
ericzma
@ericzma Supongo que heirloom-mailx es el mejor / ¿es heirloom el único mailx que puede hacerlo (especificando desde y servidor smtp en la línea de comando)? Funciona bien en Debian, aunque no está instalado por defecto. En Debian, los enlaces de mailx a / etc / Alternatives / mailx que se vinculan a / usr / bin / bsd-mailx Después de instalar heirloom-mailx a debian, los enlaces de / etc / Alternatives / mailx a / usr / bin / heirloom-mailx funcionaron bien
barlop
@barlop Su hallazgo es consistente con el mío: heirloom-mailx funciona mientras que bsd-mailx no. Todavía no estoy al tanto de otras implementaciones de trabajo.
ericzma
CentOS 6.7 utiliza Heirloom mailx 12.4
Joshua Grigonis el
3

Desde la mailx(1)página de manual, sección DESCRIPCIÓN , subsección Opciones de cadena :

   smtp   Normally, mailx invokes sendmail(8) directly to  transfer
          messages.  If the smtp variable is set, a SMTP connection
          to the server specified by the value of this variable  is
          used  instead.
Ignacio Vazquez-Abrams
fuente
Esto me confundió un poco. ¿Puedes ser más elaborado?
Rohit Banga
Uhh ... se usa a sendmailmenos que esta opción esté configurada.
Ignacio Vazquez-Abrams
1

hay una alternativa sin mta local como sendmail / postix.

paquete debian ssmtp

información de la descripción de rpm:

Summary     : Extremely simple MTA to get mail off the system to a Mailhub
URL         : http://packages.debian.org/stable/mail/ssmtp
License     : GPLv2+
Description : A secure, effective and simple way of getting mail off a system to your mail
            : hub. It contains no suid-binaries or other dangerous things - no mail spool
            : to poke around in, and no daemons running in the background. Mail is simply
            : forwarded to the configured mailhost. Extremely easy configuration.

hth

Stefan K.

StefanKaerst
fuente
1
Casi ... ssmtp es un cliente SMTP similar a MTA. Se comporta como / usr / bin / sendmail pero en lugar de conectarse directamente al registro MX de un dominio particular, delega esta tarea a un servidor SMTP accesible (generalmente a través de nombre de usuario / contraseña) a la máquina que ejecuta ssmtp. Esto es particularmente útil para aquellos sistemas que envían correos electrónicos desde altos rangos de IP de spam como rangos de IP dinámicos ADSL, proveedores de hosting poco fiables, etc.
Andre de Miranda