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

133318
Rohit Banga

Angenommen, ich sende eine E-Mail mit folgendem Befehl:

mailx person@x.com 

dann versucht mailx zuerst, den SMTP-Server meines Internetdienstanbieters herauszufinden, um die Mail weiterzuleiten, oder stellt eine direkte Verbindung her. Hängt es davon ab, ob mein PC eine öffentliche IP-Adresse hat oder hinter einem NAT steht. Wie überprüfe ich die Einstellungen von mailx auf meinem PC? Wie kann ich dies mit tcpdump überprüfen?

26

4 Antworten auf die Frage

28
ericzma

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

Ein Beispiel ist mailx, das SMTP von Google Mail verwendet .

Das configure kann sogar in einem Befehl sein:

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 wesentlich einfacher (siehe eine detaillierte Einführung 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 von mailx ~ / .mailrc einfügen

Beachten Sie, dass dies von heirloom-mailx abhängt, bei dem es sich nicht um die Standardmailx handelt. Scott vor 12 Jahren 0
@Scott: Ja. Kommt aber auf die Linux-Distribution an. Auf einigen Systemen ist der Standardwert nicht heirloom (z. B. Ubuntu: http://fclose.com/b/linux/1411/sending-email-from-mailx-command-in-linux-using-gmails-smtp/comment-page) -3 / # comment-487. Es gibt scheinbar 3 mailx-Versionen. Bei einigen anderen wie Fedora oder OpenSUSE ist die Standardeinstellung "funktionsreiche" "erirloom-mailx". ericzma vor 12 Jahren 0
@ ericzma Ich glaube Heirloom-Mailx ist das Beste / Ist Heirloom das einzige Mailx, das es kann (Angabe von und SMTP-Server in der Befehlszeile)? Es funktioniert gut unter Debian, wird aber standardmäßig nicht installiert. Unter Debian mailx Links zu / etc / alternatives / mailx die Links zu / usr / bin / bsd-mailx Nach der Installation von heirloom-mailx zu debian, / etc / alternatives / mailx zu / usr / bin / heirloom-mailx und funktionierte gut barlop vor 10 Jahren 0
@ barlop Ihr ​​Befund stimmt mit meinem überein: heirloom-mailx funktioniert, bsd-mailx jedoch nicht. Noch nicht über andere Arbeitsimplementierungen informiert. ericzma vor 10 Jahren 0
CentOS 6.7 verwendet Heirloom mailx 12.4 Joshua Grigonis vor 8 Jahren 0
Die beiden Links sind identisch. Vielleicht wollten Sie [diesen] (https://www.systutorials.com/5167/sending-email- using-mailx-in-linux-through-internal-smtp/) vorschlagen, bei dem der vorgeschlagene smtp-Server `smtp 'ist. ust.hk`. Ich weiß nicht, woher Sie `smtp.server.com` erhielten: Ist es ein echter Server oder nur ein Beispiel (gefälschter Server)? Ping gibt unbekannten Host zurück. Asarluhi vor 6 Jahren 0
@Asarluhi Ja. Danke, dass Sie darauf hingewiesen haben. Der `smtp.server.com` (der gerade in` smtp.example.com` geändert wurde) ist nur ein Beispiel. ericzma vor 6 Jahren 0
20
grawity

Traditionell verwenden Unix mailund Derivate (und viele andere Unix-Tools) die /usr/bin/sendmailvon fast allen E-Mail-Transfer-Agents (MTAs - Postfix, Exim, Courier und natürlich Sendmail) bereitgestellte Schnittstelle.

Das mailProgramm spricht also kein Netzwerkprotokoll - es leitet die Nachricht sendmailüber stdin ein und lässt die tatsächliche Zustellung zu. (Dies geht auf die Zeit zurück, als einige E-Mails SMTP, andere UUCP und andere BITNET verwendet haben.)

Sobald eine Nachricht in die Warteschlange gestellt wurde sendmail, übernimmt der MTA die eigentliche Nachrichtenübertragung, sei es über SMTP oder etwas anderes. Abhängig von der Konfiguration kann es entweder eine direkte Verbindung zum Ziel-MTA herstellen oder E-Mails über einen anderen Host (auch als Smarthost bezeichnet) weiterleiten.

Direktverbindungen sind auf Servern häufiger. Relay via Smarthost ist bei Personalcomputern bei Heimanschlüssen üblicher. Das Relaying über Ihr E-Mail-Konto bei Gmail oder ISP / Arbeit ist unerlässlich, um die generellen "dynamischen IP" -Antispamfilter zu vermeiden.

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

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

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

Native SMTP-Unterstützung ist heirloom-mailxin der traditionellen, jedoch nicht in der Regel vorhanden bsd-mailx.

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

Die dritte Methode - eine direkte Verbindung zum Server des Empfängers - wird fast nie verwendet und wird von keinem MUA unterstützt. Auf Personalcomputern würde Ihre Nachricht dazu führen, dass Ihre Nachricht abgelehnt wird (von infizierten Privatbenutzer-IP-Adressen wird viel Spam gesendet).

App → [SMTP] → Empfänger-MTA → vom Spam-Filter erfasst
Wie finde ich meinen MTA unter Linux heraus? Rohit Banga vor 14 Jahren 1
Warum sollte Outlook über einen Relay-SMTP-Server senden? Wenn ich eine E-Mail an iamrohitbanga@gmail.com sende, sollte er sich direkt an den Mail-Server wenden, da er der Mail-Server ist. Welches ist der Ziel-Mail-Server und nicht der Relay-Server? richtig oder falsch? Rohit Banga vor 14 Jahren 0
Warum verwenden Sie Google Mail oder ISP / Arbeitsserver zusammen? Angenommen, ich sende von a@b.com an c@d.com, sollte die Reihenfolge nicht app-> b-> d-> Empfängereingang sein. Rohit Banga vor 14 Jahren 0
habe die dritte Methode nicht verstanden. Wenn ich mit mailx iamrohitbanga@gmail.com sende, landen keine E-Mails in meinem Posteingang, und es wird keine Mailer-Daemon-Benachrichtigung zurückgegeben. Warum ist meine Nachricht verschwunden? Für den Mail-Server meines Unternehmens erhalte ich jedoch die Nachricht, dass E-Mails nicht zugestellt wurden, da der Name nicht aufgelöst werden konnte. Warum ist das so? Ich erinnere mich, dass ich Mailx zum Senden von Nachrichten auf einem anderen System verwendet habe. Gibt es ein Konfigurationsproblem? Rohit Banga vor 14 Jahren 0
@iamrohitbanga 1) Überprüfen Sie die Liste der installierten Pakete. (Nicht alle Distributionen werden standardmäßig mit einem MTA geliefert.) grawity vor 14 Jahren 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 Privatbenutzeradressen empfangen wurden (aufgrund einer hohen Spam-Rate von diesen). Deshalb ist das Relaying über einen Unternehmensserver erforderlich. grawity vor 14 Jahren 1
@iamrohitbanga 3) "oder" bedeutet "entweder eine von", nicht "beide". Diejenigen, die Google Mail als primäres E-Mail-Konto verwenden, senden E-Mails über die Server von Google Mail. Diejenigen, die ein Postfach bei ihrem ISP haben, verwenden die Server ihres ISP. grawity vor 14 Jahren 1
rpm -qa \ * post \ * sagt mir, dass postfix-2.5.1-28.1 installiert ist. Rohit Banga vor 14 Jahren 0
@iamrohitbanga 4) Das liegt daran, dass "mailx" ** die "dritte Methode" nicht verwendet. Es verwendet einen MTA, wie oben in meiner Antwort beschrieben. Wenn Sie keine Internetverbindung eines Unternehmens haben, werden E-Mails, die direkt von Ihrem PC (ohne Relay) gesendet werden, höchstwahrscheinlich verworfen. grawity vor 14 Jahren 1
OK, wenn Outlook mit meinem Google Mail-Konto konfiguriert ist. Die Nachricht wird über den Google Mail-Server weitergeleitet. Ich hab es jetzt. Rohit Banga vor 14 Jahren 0
Wo verschwindet meine Mail? btw fand diese http://www.postfix.org/OVERVIEW.html nützlich. Rohit Banga vor 14 Jahren 0
Ich erinnere mich, dass ich Mail mit mailx auf einem anderen System gesendet habe. Rohit Banga vor 14 Jahren 0
Gibt es jetzt Änderungen in den Firewall-Regeln, die mich oder etwas anderes verhindern? Rohit Banga vor 14 Jahren 0
@iamrohitbanga Dieses "andere System" hatte einen ordnungsgemäß konfigurierten MTA. Dies schließt das Öffnen von Port 25 / TCP für eingehende Verbindungen ein (andernfalls erhalten Sie keine eingehenden E-Mails). grawity vor 14 Jahren 1
Ich sende eine E-Mail von meinem System an x@gmail.com. Dies bedeutet, dass der Mailer-Daemon eine Nachricht mit der Nachricht über die verworfene Nachricht an meinen Computer sendet, der Port 25 nicht überwacht. Rohit Banga vor 14 Jahren 0
Dieses andere System hat jedoch E-Mails an mein Google Mail-Konto übermittelt. Infact Ich hatte ein kleines Programm, um alle meine wichtigen Daten in komprimiertem Format auf meinem Google Mail-Konto zu sichern. alle mit mailx verschickt. jetzt liefert mailx meine Mails einfach nicht. wie kann ich das problem finden? Rohit Banga vor 14 Jahren 0
OK, mein MTA ist, dass Postfix die E-Mail nicht an den richtigen Relay-Server weiterleitet. jetzt verstehe ich. Ich werde versuchen, die Postfix-Konfiguration zu sehen. Danke vielmals. Rohit Banga vor 14 Jahren 0
Können wir mailx von unserem Server verwenden, den Body zusammenstellen, Dateien anhängen, dann aber eine Verbindung zu einem Remote-Sendmail-Server herstellen, nur um "zu senden", aber ohne SMTP? Wir wurden auf dem Remote-Sendmail-Server als Whitelist aufgeführt, möchten jedoch die E-Mail auf unserer Seite zusammenstellen. PKHunter vor 6 Jahren 0
@PKHunter: Sicher, es wäre einfach ein Shellskript mit `ssh mymailserver / usr / sbin / sendmail` zu schreiben. Bei den meisten modernen Mail / Mailx-Clients können Sie einen benutzerdefinierten Pfad zum Sendmail-Tool angeben. Richten Sie es auf das Shell-Skript. (Aber warum möchten Sie nicht SMTP zum Einfügen der Nachricht verwenden? Genau dafür ist der "Message Submission" -Dienst an Port 587 gedacht.) grawity vor 6 Jahren 1
@grawity danke dafür. Wir können keine Shell-Skripte verwenden. Wir müssen "mailx" auf unserem Server verwenden, einen Körper mit Anhängen auf unserem Server über unsere Node-App erstellen, aber schließlich das eigentliche "Senden" mit einem "SendMail" -Server ausführen, der auf einer Remote-IP ohne "smtp-auth" ausgeführt wird aktiviert. Brauchen wir überhaupt mailx für diesen Zweck? Wenn der Remote-Server SMTP mit normaler Authentifizierung (Server, Port, Benutzername, Pass) aktiviert hätte, würde er alle diese Probleme lösen. Das Problem ist, dass auf dieser Seite kein Benutzername / Pass aktiviert ist. PKHunter vor 6 Jahren 0
Entschuldigung, ich meinte, dass smtp-auth deaktiviert ist. Wir müssen sendmail ohne Passwort verwenden. Der Remote-Server mit Sendmail hat unsere IPs auf die Whitelist gesetzt. PKHunter vor 6 Jahren 0
Wenn Sie SMTP verwenden, ist "SendMail" auf der fernen Seite _keins völlig irrelevant. Es ist nicht dasselbe wie eine lokale / usr / lib / sendmail-API. Es ist nur ein Dienst, der SMTP bereitstellt. Wenn SMTP bereitgestellt wird, verwenden Sie eines der Dutzend Node-Module, die über SMTP kommunizieren können. Ehrlich gesagt, sind Kommentare eines nicht verwandten Threads nicht der richtige Ort dafür ... grawity vor 6 Jahren 0
1
Ignacio Vazquez-Abrams

Auf der mailx(1)Manpage, Abschnitt DESCRIPTION, Abschnitt String-Optionen :

 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. 
das hat mich etwas verwirrt. kannst du etwas ausführlicher sein? Rohit Banga vor 14 Jahren 0
Ähh ... es verwendet "sendmail", sofern diese Option nicht gesetzt ist. Ignacio Vazquez-Abrams vor 14 Jahren 0
1
StefanKaerst

es gibt eine alternative ohne lokales mta wie sendmail / postix.

Debian-Paket ssmtp

Infos zur Drehzahlbeschreibung:

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.

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 Domäne zu verbinden, delegiert es diese Aufgabe an einen SMTP-Server, auf den (normalerweise über Benutzername / Kennwort) der Computer zugreifen kann, auf dem ssmtp ausgeführt wird. Dies ist besonders nützlich für Systeme, die E-Mails aus hohen Spam-IP-Bereichen wie dynamischen ADSL-IP-Bereichen, zweifelhaften Hosting-Providern usw. senden. Andre de Miranda vor 10 Jahren 0