Versendet mailx E-Mails über ein SMTP-Relay oder stellt es eine direkte Verbindung zum Ziel-SMTP-Server her?

30

Angenommen, ich sende eine Mail mit dem folgenden Befehl:

mailx [email protected]

Dann versucht mailx zuerst, den SMTP-Server meines Internetdienstanbieters für die Weiterleitung der E-Mails zu ermitteln, oder stellt die Verbindung direkt her. Kommt es darauf an, ob mein PC eine öffentliche IP-Adresse hat oder sich hinter einem NAT befindet. Wie überprüfe ich die Einstellungen von mailx auf meinem PC? Wie kann ich dies mit tcpdump überprüfen?

Rohit Banga
quelle

Antworten:

29

Traditionell verwenden Unix mailund Derivate (und viele andere Unix-Tools) die /usr/bin/sendmailSchnittstelle, die von fast allen Mail-Transfer-Agents (MTAs - Postfix, Exim, Courier und natürlich Sendmail) bereitgestellt wird.

Das heißt, das mailProgramm spricht kein Netzwerkprotokoll - es leitet die Nachricht sendmailüber stdin weiter und ermöglicht die eigentliche Zustellung. (Dies geht auf die Zeit zurück, als einige E-Mails SMTP, andere UUCP und andere BITNET verwendeten ...)

Sobald eine Nachricht in die Warteschlange eingereiht wurde sendmail, verarbeitet der MTA die eigentliche Nachrichtenübertragung, egal ob über SMTP oder eine andere Methode. Je nach Konfiguration wird entweder eine direkte Verbindung zum Ziel-MTA hergestellt oder E-Mails werden über einen anderen Host (auch als Smarthost bezeichnet) weitergeleitet.

Direktverbindungen sind auf Servern häufiger. Die Weitergabe über Smarthost ist bei PCs mit Heimanschlüssen häufiger. Die Weitergabe über Ihr Google Mail- oder ISP- / geschäftliches E-Mail-Konto ist unerlässlich, um die pauschalen "dynamischen IP" -Antispamfilter zu vermeiden.

(Einige MTAs wie esmtpoder nullmailerwurden speziell für Privatanwender entwickelt und verwenden immer einen Relayhost. Diese unterstützen den Empfang von E-Mails nicht und sind wesentlich ressourcenschonender.)

mailx → [/ usr / bin / sendmail] → lokale MTA-Warteschlange → [SMTP] → Empfänger-MTA → Empfänger-Posteingang
mailx → [/ usr / bin / sendmail] → lokale MTA-Warteschlange → [SMTP] → Gmail oder ISP / Arbeitsserver → [SMTP] → Empfänger-MTA → Empfängereingang

Andere Programme, meistens die benutzerfreundlichen grafischen Clients wie Thunderbird oder Outlook, stellen immer eine direkte Verbindung zu einem Relay- / Smarthost-SMTP-Server her (normalerweise wieder Gmail- oder ISP- / Work-SMTP-Server), der die Nachricht in Ihrem Namen überträgt.

Die native SMTP-Unterstützung ist in heirloom-mailx, jedoch nicht in der herkömmlichen Form vorhanden bsd-mailx.

App → [SMTP] → Google Mail oder ISP / Arbeitsserver → [SMTP] → Empfänger-MTA → Empfängereingang

Die dritte Methode - die direkte Verbindung zum Server des Empfängers - wird fast nie verwendet, und kein MUA unterstützt dies. Wenn Sie diese Option auf PCs verwenden, wird Ihre Nachricht abgelehnt (von infizierten IP-Adressen der Privatbenutzer wird viel Spam gesendet).

App → [SMTP] → Empfänger-MTA → Vom Spamfilter abgefangen
Grawity
quelle
1
Wie finde ich meinen MTA unter Linux heraus?
Rohit Banga
1
@iamrohitbanga 1) Überprüfen Sie die Liste der installierten Pakete. (Nicht alle Distributionen werden standardmäßig mit einem MTA ausgeliefert.)
grawity
1
@iamrohitbanga 2) Das habe ich schon beantwortet. Outlook wird häufig auf einem PC zu Hause verwendet, und viele Mailserver lehnen Nachrichten ab, die von den Adressen der Privatbenutzer empfangen wurden (aufgrund der hohen Spam-Rate von diesen). Aus diesem Grund ist ein Relay über einen Unternehmensserver erforderlich.
Grawity
1
@iamrohitbanga 3) "oder" bedeutet "eines von", nicht "beides". Diejenigen, die Google Mail als primäres E-Mail-Konto verwenden, senden E-Mails über die Server von Google Mail. Diejenigen, die eine Mailbox bei ihrem ISP haben, benutzen die Server ihres ISP.
Grawity
1
@iamrohitbanga 4) Das liegt daran mailx , dass die "dritte Methode" nicht verwendet wird . Es wird ein MTA verwendet, wie oben in meiner Antwort beschrieben. Wenn Sie keine Unternehmens-Internetverbindung haben, werden E-Mails, die direkt von Ihrem PC (ohne Relay) gesendet werden, mit hoher Wahrscheinlichkeit verworfen.
Grawity
31

mailx kann SMTP verwenden. Die Konfigurationsdatei lautet ~ / .mailrc

Ein Beispiel ist mailx mit Gmail SMTP .

Die Konfiguration kann sogar in einem Befehl erfolgen:

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

Wenn ein normaler SMTP-Server verwendet wird, ist dies viel einfacher (eine ausführliche Einführung finden Sie hier ):

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

Sie können diese auch in die Konfigurationsdatei ~ / .mailrc von mailx einfügen

ericzma
quelle
Beachten Sie, dass dies von heirloom-mailx abhängt, das nicht die Standardmailx ist.
Scott
@ Scott: Ja. Kommt aber auf die Linux Distribution an. Auf einigen Systemen ist die Standardeinstellung kein Erbstück (z . B. Ubuntu: fclose.com/b/linux/1411/… . Anscheinend gibt es drei Mailx-Versionen). Bei einigen anderen, wie Fedora, OpenSUSE, ist die Standardeinstellung "heirloom-mailx" mit zahlreichen Funktionen.
Ericzma
@ericzma Ich denke, heirloom-mailx ist die beste / ist heirloom die einzige mailx, die das kann (Angabe von und SMTP-Server in der Befehlszeile)? Es funktioniert gut unter Debian, obwohl es nicht standardmäßig installiert ist. Auf Debian mailx Links zu / etc / alternatives / mailx die Links zu / usr / bin / bsd-mailx Nach der Installation von Erbstück-mailx auf debian, / etc / alternatives / mailx Links zu / usr / bin / Erbstück-mailx und schön gearbeitet
Barlop
@barlop Ihr ​​Ergebnis stimmt mit meinem überein: heirloom-mailx funktioniert, bsd-mailx nicht. Es sind noch keine anderen Arbeitsimplementierungen bekannt.
Ericzma
CentOS 6.7 verwendet Heirloom mailx 12.4
Joshua Grigonis
3

Auf der mailx(1)Manpage, Abschnitt DESCRIPTION , Unterabschnitt String Options :

   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
quelle
das hat mich ein bisschen verwirrt. Kannst du ausführlicher sein?
Rohit Banga
Ähh ... es wird verwendet, sendmailsofern diese Option nicht aktiviert ist.
Ignacio Vazquez-Abrams
1

Es gibt eine Alternative ohne lokales MTA wie sendmail / postix.

Debian-Paket ssmtp

info von rpm beschreibung:

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
quelle
1
Fast ... ssmtp ist ein MTA-ähnlicher SMTP-Client. Es verhält sich wie / usr / bin / sendmail, aber anstatt sich direkt mit dem MX-Eintrag einer bestimmten Domain zu verbinden, delegiert es diese Aufgabe an einen SMTP-Server, auf den (normalerweise über Benutzername / Passwort) der Computer zugreifen kann, auf dem ssmtp ausgeführt wird. Dies ist besonders nützlich für Systeme, die E-Mails aus IP-Bereichen mit hohem Spam-Anteil wie dynamischen ADSL-IP-Bereichen, zweifelhaften Hosting-Anbietern usw. senden.
Andre de Miranda