Mailx invia posta utilizzando un relay SMTP o si collega direttamente al server SMTP di destinazione?


30

Supponiamo di inviare una mail usando il seguente comando:

mailx person@x.com

quindi Mailx prova prima a scoprire il server SMTP del mio ISP per inoltrare la posta o si connette direttamente. Dipende dal fatto che il mio PC abbia un indirizzo IP pubblico o sia protetto da un NAT. Come posso controllare le impostazioni di mailx sul mio PC? Come posso verificarlo usando tcpdump?

Risposte:


29

Tradizionalmente, Unix maile derivati ​​(e molti altri strumenti Unix) utilizzano l' /usr/bin/sendmailinterfaccia, fornita da quasi tutti gli agenti di trasferimento di posta (MTA - postfix, exim, corriere e, naturalmente, sendmail).

Cioè, il mailprogramma non parla alcun protocollo di rete, ma trasmette il messaggio sendmailtramite stdin e gli consente di gestire la consegna effettiva. (Ciò risale ai giorni in cui alcuni messaggi utilizzavano SMTP, altri utilizzavano UUCP, altri utilizzavano BITNET ...)

Dopo che un messaggio è stato messo in coda sendmail, l'MTA gestisce la trasmissione effettiva dei messaggi, sia tramite SMTP o qualcos'altro. A seconda della configurazione, può connettersi direttamente all'MTA di destinazione o inoltrare la posta attraverso un altro host (chiamato anche smarthost).

La connessione diretta è più comune sui server; l'inoltro tramite smarthost è più comune sui personal computer nelle connessioni domestiche: l'inoltro tramite l'account Gmail o ISP / e-mail di lavoro è essenziale per evitare i filtri antispam "IP dinamici".

(Alcuni MTA come esmtpo nullmailersono creati appositamente per gli utenti domestici e usano sempre un relayhost. Questi non supportano la ricezione della posta e sono molto più leggeri sulle risorse.)

mailx → [/ usr / bin / sendmail] → coda MTA locale → [SMTP] → MTA destinatario → posta in arrivo destinatario
mailx → [/ usr / bin / sendmail] → coda MTA locale → [SMTP] → Gmail o ISP / server di lavoro → [SMTP] → MTA destinatario → posta in arrivo destinatario

Altri programmi, principalmente i client grafici intuitivi come Thunderbird o Outlook, si connettono sempre direttamente a un server SMTP relay / smarthost (di nuovo, di solito Gmail o ISP / server SMTP di lavoro), che trasmette il messaggio per tuo conto.

Il supporto SMTP nativo è presente in heirloom-mailx, ma non nel tradizionale bsd-mailx.

app → [SMTP] → Gmail o ISP / server di lavoro → [SMTP] → destinatario MTA → posta in arrivo destinatario

Il terzo metodo, che si collega direttamente al server del destinatario, non viene quasi mai utilizzato e nessun MUA lo supporta. Sui personal computer, l'utilizzo di esso causerebbe il rifiuto del messaggio (molto spam viene inviato da indirizzi IP di utenti domestici infetti).

app → [SMTP] → destinatario MTA → catturato dal filtro antispam

1
come scoprire il mio MTA su Linux?
Rohit Banga,

1
@iamrohitbanga 1) Controlla l'elenco dei pacchetti installati. (Non tutte le distro vengono con un MTA di default.)
Grawity

1
@iamrohitbanga 2) Ho già risposto. Outlook viene spesso utilizzato su un personal computer a casa e molti server di posta rifiutano i messaggi ricevuti dagli indirizzi degli utenti domestici (a causa dell'elevato tasso di spam da quelli). Ecco perché è necessario l'inoltro attraverso un server aziendale.
Grawity

1
@iamrohitbanga 3) "o" significa "uno dei due", non "entrambi". Coloro che utilizzano Gmail come account di posta principale inviano posta tramite i server di Gmail. Coloro che hanno una cassetta postale nel proprio ISP usano i server del proprio ISP.
Grawity

1
@iamrohitbanga 4) Questo perché mailx non utilizza il "terzo metodo". Utilizza un MTA come descritto nella parte superiore della mia risposta. E ancora una volta, se non si utilizza una connessione Internet aziendale, è molto probabile che la posta inviata direttamente dal PC (senza inoltro) venga scartata.
Grawity

31

mailx può usare SMTP. Il suo file di configurazione è ~ / .mailrc

Un esempio è mailx che utilizza SMTP di Gmail .

La configurazione può anche essere in un solo 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

Se viene utilizzato un normale server SMTP, è molto più semplice (vedere un'introduzione dettagliata qui ):

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

Puoi anche metterli nel file di configurazione di mailx ~ / .mailrc


Nota che questo dipende da heirloom-mailx che non è il mailx predefinito.
Scott,

@Scott: Sì. Ma dipende dalla distribuzione Linux. Su alcuni sistemi, il valore predefinito non è cimelio (ad esempio Ubuntu: fclose.com/b/linux/1411/… . Sembra che ci siano 3 versioni di mailx). Su alcuni altri come Fedora, OpenSUSE, quello predefinito è "heirloom-mailx" "ricco di funzionalità".
ericzma,

@ericzma Immagino che heirloom-mailx sia il migliore / heirloom è l'unico mailx che può farlo (specificando da e dal server SMTP dalla riga di comando)? Funziona bene su Debian sebbene non sia installato di default. Su Debian i collegamenti mailx a / etc / alternatives / mailx che si collega a / usr / bin / bsd-mailx Dopo aver installato heirloom-mailx su debian, / etc / alternatives / mailx si collega a / usr / bin / heirloom-mailx e ha funzionato bene
barlop,

@barlop La tua scoperta è coerente con la mia: heirloom-mailx funziona mentre bsd-mailx no. Non sono ancora a conoscenza di altre implementazioni funzionanti.
ericzma,

CentOS 6.7 utilizza Heirloom mailx 12.4
Joshua Grigonis il

3

Dalla mailx(1)pagina man, sezione DESCRIPTION , sottosezione Opzioni stringa :

   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.

questo mi ha confuso un po '. puoi essere più elaborato.
Rohit Banga,

Uhh ... usa a sendmailmeno che questa opzione non sia impostata.
Ignacio Vazquez-Abrams,

1

esiste un'alternativa senza mta locale come sendmail / postix.

pacchetto debian ssmtp

informazioni dalla descrizione 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.


1
Quasi ... ssmtp è un client SMTP simile a MTA. Si comporta come / usr / bin / sendmail ma invece di connettersi direttamente al record MX di un determinato dominio, delega questa attività a un server SMTP accessibile (di solito tramite nome utente / password) alla macchina che esegue ssmtp. Ciò è particolarmente utile per quei sistemi che inviano e-mail da intervalli IP di spam elevati come intervalli IP dinamici ADSL, provider di hosting instabili, ecc.
Andre de Miranda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.