Czy mailx wysyła pocztę za pomocą przekaźnika SMTP, czy łączy się bezpośrednio z docelowym serwerem SMTP?

30

Załóżmy, że wysyłam wiadomość za pomocą następującego polecenia:

mailx [email protected]

następnie mailx najpierw próbuje znaleźć serwer SMTP mojego ISP do przekazywania poczty lub łączy się bezpośrednio. Czy to zależy od tego, czy mój komputer ma publiczny adres IP, czy znajduje się za NAT. Jak sprawdzić ustawienia mailx na moim komputerze? Jak mogę to sprawdzić za pomocą tcpdump?

Rohit Banga
źródło

Odpowiedzi:

29

Tradycyjnie Unix maili pochodne (i wiele innych narzędzi Uniksa) używają /usr/bin/sendmailinterfejsu dostarczanego przez prawie wszystkich agentów przesyłania poczty (MTA - postfix, exim, kurier i oczywiście sendmail).

Oznacza to, że mailprogram nie komunikuje się z żadnym protokołem sieciowym - przekazuje wiadomość na sendmailadres stdin i pozwala obsłużyć faktyczną dostawę. (To sięga czasów, kiedy część poczty używała SMTP, część UUCP, część BITNET ...)

Gdy wiadomość jest w kolejce sendmail, MTA obsługuje faktyczną transmisję wiadomości, czy to przez SMTP, czy coś innego. W zależności od konfiguracji może albo łączyć się bezpośrednio z docelowym MTA, albo przekazywać pocztę przez inny host (zwany także smarthost).

Połączenie bezpośrednie jest bardziej powszechne na serwerach; Przekazywanie za pośrednictwem smarthosta jest bardziej powszechne na komputerach osobistych w połączeniach domowych - przekazywanie przez konto Gmail lub ISP / służbowe jest niezbędne, aby uniknąć ogólnych filtrów antyspamowych „dynamiczne IP”.

(Niektóre MTA, takie jak esmtplub nullmailersą zbudowane specjalnie dla użytkowników domowych i zawsze używają hosta sztafetowego. Nie obsługują one odbierania poczty i są znacznie lżejsze pod względem zasobów.)

mailx → [/ usr / bin / sendmail] → lokalna kolejka MTA → [SMTP] → MTA odbiorcy → skrzynka odbiorcza
mailx → [/ usr / bin / sendmail] → lokalna kolejka MTA → [SMTP] → Gmail lub ISP / serwery robocze → [SMTP] → MTA odbiorcy → skrzynka odbiorcza

Inne programy, głównie przyjazne dla użytkownika klienty graficzne, takie jak Thunderbird lub Outlook, zawsze łączą się bezpośrednio z serwerem SMTP z przekaźnikiem / smarthostem (ponownie, zwykle Gmail lub ISP / work SMTP), który przesyła wiadomość w Twoim imieniu.

Natywna obsługa SMTP jest obecna heirloom-mailx, ale nie w tradycyjnej bsd-mailx.

aplikacja → [SMTP] → Gmail lub ISP / serwery robocze → [SMTP] → odbiorca MTA → skrzynka odbiorcza

Trzecia metoda - połączenie bezpośrednio z serwerem odbiorcy - prawie nigdy nie jest używana i żaden MUA jej nie obsługuje. Używanie go na komputerach osobistych spowoduje odrzucenie wiadomości (duża część spamu jest wysyłana z adresów IP zainfekowanych użytkowników domowych).

aplikacja → [SMTP] → MTA odbiorcy → złapany przez filtr antyspamowy
grawitacja
źródło
1
jak znaleźć moją MTA na Linuksie?
Rohit Banga
1
@iamrohitbanga 1) Sprawdź listę zainstalowanych pakietów. (Nie wszystkie dystrybucje mają domyślnie MTA.)
grawity
1
@iamrohitbanga 2) Już na to odpowiedziałem. Program Outlook jest często używany na komputerze osobistym w domu, a wiele serwerów pocztowych odrzuca wiadomości otrzymane z adresów użytkowników domowych (z powodu wysokiego wskaźnika spamu z tych adresów). Dlatego konieczne jest przekazywanie przez serwer korporacyjny.
grawitacja
1
@iamrohitbanga 3) ”lub„ oznacza „jeden z”, a nie „oba”. Ci, którzy używają Gmaila jako podstawowego konta pocztowego, wysyłają pocztę za pośrednictwem serwerów Gmaila. Ci, którzy mają skrzynkę pocztową u swojego dostawcy usług internetowych, korzystają z jego serwerów.
grawitacja
1
@iamrohitbanga 4) To dlatego, mailx że nie używa „trzeciej metody”. Używa MTA, jak opisano na górze mojej odpowiedzi. I ponownie, jeśli nie korzystasz z firmowego połączenia internetowego, poczta wysyłana bezpośrednio z komputera (bez przekaźnika) najprawdopodobniej zostanie odrzucona.
grawitacja
31

mailx może korzystać z SMTP. Jego plik konfiguracyjny to ~ / .mailrc

Jednym z przykładów jest mailx korzystający z SMTP Gmaila .

Konfiguracja może być nawet w jednym poleceniu:

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

Jeśli używany jest zwykły serwer SMTP, jest to o wiele łatwiejsze (zobacz szczegółowe wprowadzenie tutaj ):

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

Możesz również umieścić je w pliku konfiguracyjnym mailx ~ / .mailrc

ericzma
źródło
Zauważ, że zależy to od heirloom-mailx, który nie jest domyślnym mailx.
Scott,
@ Scott: Tak. Ale zależy od dystrybucji Linuksa. W niektórych systemach domyślnie nie jest to dziedziczenie (np. Ubuntu: fclose.com/b/linux/1411 / .... Wydaje się, że istnieją 3 wersje mailx ). W niektórych innych, takich jak Fedora, OpenSUSE, domyślną jest „funkcja wzbogacona” „heirloom-mailx”.
ericzma
@ericzma Wydaje mi się, że heirloom-mailx jest najlepszy / czy heirloom jest jedynym mailxem, który może to zrobić (określając z serwera smtp w wierszu poleceń)? Działa ładnie na Debianie, chociaż domyślnie nie jest instalowany. Na Debianie mailx linki do / etc / alternatives / mailx, które prowadzą do / usr / bin / bsd-mailx Po zainstalowaniu heirloom-mailx na debian, / etc / alternatives / mailx linki do / usr / bin / heirloom-mailx i działały ładnie
barlop
@barlop Twoje odkrycie jest zgodne z moim: heirloom-mailx działa, a bsd-mailx nie. Nie wiem jeszcze o innych działających implementacjach.
ericzma
CentOS 6.7 używa Heirloom mailx 12.4
Joshua Grigonis
3

Ze strony podręcznika mailx(1), sekcja OPIS , podsekcja Opcje ciągu :

   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
źródło
to mnie trochę zmieszało. czy możesz być bardziej skomplikowany.
Rohit Banga
Uch ... używa, sendmailchyba że ta opcja jest ustawiona.
Ignacio Vazquez-Abrams
1

istnieje alternatywa bez lokalnego MTA, taka jak sendmail / postix.

pakiet debian ssmtp

informacje z opisu 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
źródło
1
Prawie ... ssmtp to klient SMTP podobny do MTA. Zachowuje się jak / usr / bin / sendmail, ale zamiast łączyć się bezpośrednio z rekordem MX konkretnej domeny, deleguje to zadanie na serwer SMTP dostępny (zwykle za pośrednictwem nazwy użytkownika / hasła) na maszynę z uruchomionym ssmtp. Jest to szczególnie przydatne w przypadku systemów wysyłających wiadomości e-mail z dużych zakresów adresów IP spamu, takich jak dynamiczne zakresy adresów IP ADSL, podejrzani dostawcy hostingu itp.
Andre de Miranda