Mailx отправляет почту с использованием SMTP-ретранслятора или напрямую подключается к целевому SMTP-серверу?

30

Предположим, я отправил письмо, используя следующую команду:

mailx person@x.com

затем mailx сначала пытается найти SMTP-сервер моего провайдера для ретрансляции почты или он подключается напрямую. Зависит ли это от того, имеет ли мой компьютер публичный IP-адрес или он находится за NAT. Как проверить настройки mailx на моем ПК? Как я могу проверить это с помощью tcpdump?

Рохит Банга
источник

Ответы:

29

Традиционно Unix mailи его производные (и многие другие инструменты Unix) используют /usr/bin/sendmailинтерфейс, предоставляемый почти всеми агентами пересылки почты (MTA - postfix, exim, courier и, конечно, sendmail).

То есть mailпрограмма не говорит ни по какому сетевому протоколу - она ​​передает сообщение sendmailчерез стандартный ввод и позволяет обрабатывать фактическую доставку. (Это восходит к тем дням, когда некоторые письма использовали SMTP, некоторые использовали UUCP, некоторые использовали BITNET ...)

Как только сообщение помещено в очередь sendmail, MTA обрабатывает фактическую передачу сообщения, через SMTP или что-то еще. В зависимости от конфигурации он может либо подключаться напрямую к MTA-получателю, либо пересылать почту через другой хост (также называемый smarthost).

Прямое соединение чаще встречается на серверах; ретрансляция через smarthost чаще встречается на персональных компьютерах при домашних подключениях - ретрансляция через учетную запись Gmail или интернет-провайдера / рабочей электронной почты необходима для того, чтобы избежать общих «динамических IP» антиспам-фильтров.

(Некоторые адаптеры MTA, такие как esmtpили nullmailerсозданные специально для домашних пользователей, всегда используют relayhost. Они не поддерживают прием почты и значительно экономят ресурсы).

mailx → [/ usr / bin / sendmail] → локальная очередь MTA → [SMTP] → MTA получателя → почтовый ящик получателя
mailx → [/ usr / bin / sendmail] → локальная очередь MTA → [SMTP] → Gmail или ISP / рабочие серверы → [SMTP] → получатель MTA → почтовый ящик получателя

Другие программы, в основном удобные для пользователя графические клиенты, такие как Thunderbird или Outlook, всегда подключаются напрямую к SMTP-серверу relay / smarthost (опять же, обычно это Gmail или ISTP / рабочий SMTP-сервер), который передает сообщение от вашего имени.

Собственная поддержка SMTP присутствует heirloom-mailx, но не традиционна bsd-mailx.

приложение → [SMTP] → Gmail или ISP / рабочие серверы → [SMTP] → получатель MTA → почтовый ящик получателя

Третий метод - подключение напрямую к серверу получателя - почти никогда не используется, и MUA его не поддерживает. На персональных компьютерах его использование может привести к отклонению вашего сообщения (большая часть спама отправляется с IP-адресов зараженного домашнего пользователя).

приложение → [SMTP] → MTA получателя → перехвачено фильтром спама
grawity
источник
1
как узнать мой MTA на linux?
Рохит Банга
1
@iamrohitbanga 1) Проверьте список установленных пакетов. (Не все дистрибутивы поставляются с MTA по умолчанию.)
grawity
1
@iamrohitbanga 2) Я уже ответил на это. Outlook часто используется на персональном компьютере дома, и многие почтовые серверы отклоняют сообщения, полученные с адресов домашних пользователей (из-за высокого уровня спама от них). Вот почему ретрансляция через корпоративный сервер необходима.
2010 года
1
@iamrohitbanga 3) "или" означает "один из", а не "оба". Те, кто использует Gmail в качестве своей основной почтовой учетной записи, отправляют почту через серверы Gmail. Те, у кого есть почтовый ящик у интернет-провайдера, используют серверы своего провайдера.
благодарность
1
@iamrohitbanga 4) Это потому, mailx что не использует «третий метод». Он использует MTA, как описано в верхней части моего ответа. И еще раз, если вы не подключены к корпоративному Интернету, почта, отправленная напрямую с вашего ПК (без ретранслятора), с большой вероятностью будет отброшена.
благодарность
31

mailx может использовать SMTP. Это файл конфигурации ~ / .mailrc

Одним из примеров является mailx с использованием SMTP Gmail .

Конфигурация может быть даже в одной команде:

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

Если используется обычный SMTP-сервер, это намного проще (см. Подробное введение здесь ):

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

Вы также можете поместить их в конфигурационный файл mailx ~ / .mailrc

ericzma
источник
Обратите внимание, что это зависит от heirloom-mailx, который не является mailx по умолчанию.
Скотт
@ Скотт: Да. Но зависит от дистрибутива Linux. В некоторых системах по умолчанию используется не семейная реликвия (например, Ubuntu: fclose.com/b/linux/1411/… . Кажется, есть 3 версии mailx). На некоторых других, таких как Fedora, OpenSUSE, по умолчанию используется «богатая функция» «heirloom-mailx».
ericzma
@ericzma Полагаю, heirloom-mailx - лучший / heirloom - единственный mailx, который может это сделать (указав с сервера smtp и из командной строки)? Он хорошо работает в Debian, хотя по умолчанию не установлен. В Debian mailx ссылается на / etc / alternatives / mailx, который ссылается на / usr / bin / bsd-mailx После установки heirloom-mailx на debian, / etc / alternatives / mailx ссылается на / usr / bin / heirloom-mailx и работает нормально
Бароп
@barlop Ваш вывод соответствует моему: heirloom-mailx работает, а bsd-mailx - нет. Пока не известно о других рабочих реализациях.
Ericzma
CentOS 6.7 использует фамильную реликвию mailx 12.4
Джошуа Григонис
3

На mailx(1)странице руководства , в разделе ОПИСАНИЕ , подраздел Параметры строки :

   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.
Игнасио Васкес-Абрамс
источник
это немного смутило меня. Вы можете быть более сложным.
Рохит Банга
Э-э-э ... он использует, sendmailесли эта опция не установлена.
Игнасио Васкес-Абрамс
1

есть альтернатива без локального mta типа sendmail / postix.

пакет Debian ssmtp

информация из описания 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.

НТН

Стефан К.

StefanKaerst
источник
1
Почти ... ssmtp - это MTA-подобный SMTP-клиент. Он ведет себя как / usr / bin / sendmail, но вместо непосредственного подключения к записи MX определенного домена он делегирует эту задачу SMTP-серверу, доступному (обычно через имя пользователя / пароль) машине, на которой выполняется ssmtp. Это особенно полезно для тех систем, которые отправляют электронную почту с диапазонов IP-адресов с высоким уровнем нежелательной почты, таких как динамические диапазоны IP-адресов ADSL, провайдеры хитрого хостинга и т. Д.
Andre de Miranda