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.