Email разные заметки (mta, mda, msa, mua, pop, imap; mutt, mail, ssmt; Cisco ESA, Outlook)

Терминология, протоколы, описание работы
  • Mail Transfer Agent (MTA) – это mail server (mail router, mail exchanger or MX, SMTP gateway), MTA (почтовый сервер) отвечает за передачу сообщений от отправителя получателю. В DNS для обозначения MTA для доменов используется запись MX. Для MX записи так же можно задать значение preference для нескольких записей, если компания использует несколько mail серверов (отказоустойчивость и балансировка). Посредством резолвинга MX записи с последующим использованием SMTP передается почтовый трафик в интернете. Именно MX записи резолвят почтовые клиенты. Для траблшутинга связи с smtp (получения записей MX) может использоваться linux dig команда.
    • Mail Delivery Agent (MDA) – компонент отправки MTA, отвечающий за конечную доставку сообщения в почтовый ящик пользователя
    • Mail Submission Agent (MSA) – компонент получения MTA, который принимает новые письма от MUA используя SMTP
  • Mail User Agent (MUA) – почтовый клиент/читатель, установленный на пользовательскую систему/мобильное устройство, с сервером почтовый клиент работает используя один из протоколов ниже (по эволюции):
    • Post Office Protocol (POP3) – протокол взаимодействия между почтовым клиентом и почтовым сервером, который выгружает (с удалением на сервере) почтовые сообщения с сервера в почтовый клиент.
    • Internet Message Access Protocol (IMAP) – протокол взаимодействия между почтовым клиентом и почтовым сервером, который позволяет пользователю сохранить сообщения на сервере. IMAP по умолчанию не загружает сообщения с сервера и показывает их напрямую с него, но есть возможность выгрузки писем с сохранением их локально (для архивации).
    • Messaging Application Programming Interface (MAPI) – проприетарный (хотя есть открытые реализации) протокол Microsoft как замена IMAP с рядом дополнительных улучшений (напр. синхронизация календаря, контактов, задач, статуса и проч.), широко применяется при работе с Outlook + Exchange

Outlook
Дебаг проблем с Outlook
ctrl -> guesssmart disable -> test configuration -> xml должен получить/при ошибках написать

Например полезен при недоступности сервера по MAPI протоколу.

В контексте проблемы с доступностью по MAPI – сервер при этом может быть доступен по POP3/IMAP + SMTP. Причиной такого различия может быть проблема с DNS, при подключении по MAPI нужен дополнительный резолв, в сравнении с POP3/IMAP + SMTP.

RETRANSMISSIONS

Сообщение еще не доставлено. Система продожит попытки доставить его.
Сервер продолжит попытки доставить это сообщение в течение следующих 1 дн., 19 ч. и 59 мин.
Вы будете уведомлены если за это время сообщение доставить не удастся.

PTR DNS запись

outlook проверяет ptr, который прописывается тем, кто выдает IP (поэтому его можно указать только для VDS/VPS услуг у reg.ru, а не для услуги доменное имя).
PTR запись — обратная DNS-запись, связывающая IP-адрес сервера с его каноническим именем (доменом). Широко используется при фильтрации почты. Если вы хотите, чтобы письма, отправленные с вашего сервера, благополучно достигали адресата, пропишите для сервера корректную PTR-запись.
В противном случае будет ошибка Client host rejectedcannot find your hostname
– несовпадение записи MX домена и PTR-записи для IP -адреса сервера ( cкорее всего не прописана PTR запись).
Nov  2 11:14:11 DMG sm-mta[20831]: 0A28DFgx020828: to=<pr@mai-ent.ru>, delay=00:00:56, xdelay=00:00:01, mailer=esmtp, pri=210616, relay=mx.mail-ent.ru. [1.1.183.115], dsn=4.7.25, stat=Deferred: 450 4.7.25 Client host rejected: cannot find your hostname, [1.1.183.93]
Поиск MX/PTR записи для домена.
https://dnschecker.org/mx-lookup.php?query=test.redkin.net 
http://mxtoolbox.com/ReverseLookup.aspx (здесь по IP можно проверить наличие PTR записи)
Cisco ESA

В отдельной статье.

 

Linux отправка почты
# INSTALL
apt install mailutils
apt install sendmail # ставим только если хотим отправлять сообщения напрямую с сервера (без учетной записи gmail/yandex/проч)
apt install mutt

# LOG
 tail -n 10000 -f /var/log/mail* # mail.err mail.warn mail.log mail.info

# Settings

Отправка через утилиту не означает что почта настроена через нее, к примеру, Mutt может использовать настройки ssmtp для отправки почты из файла /etc/ssmtp/ssmtp.conf (самый простой вариант).

Конфиг для почты обычно лежит где-то тут (см. в man mutt, man ssmtp):

# Пользовательский
~/.muttrc
~/.mailrc

# Системный
/etc/ssmtp/ssmtp.conf
/etc/mutt/Muttrc
/etc/mail.rc
/etc/mail/sendmail.cf
/etc/postfix/main.cf

Обычно отправителя, получателя, subject можно указывать как через предварительно заполненный файл, так и через опции для утилиты.

$ cat test
To: petr@redkin.net
From: <login>@corbina.net
Subject: Test Subj
$ ssmtp -s petr@redkin.net <test

$ mutt -s "daily report" petr@redkin.net

# Text

Всем утилитам можно отправлять как через echo, так и через файл.

echo "test text" | mutt -s "test subj" petr@redkin.net
mutt -s "test subj" test@test.ru </home/test/test

# Attachment

Отправка attachment возможна через

  • mutt/mpack из коробки с использованием MIME кодирования
  • mail из коробки
  • ssmtp с использованием uuencode

# Fake From

Почтовый сервер может не проверять поля from (можно даже отослать с president@somecountry.com).

~ $ cat ~/.muttrc
set realname="Vova" # имя отправителя
set from="president@somecountry.com"  # e-mail отправителя
Mutt

Uuencode считается deprecated способ и нежелателен для использования. На практике у меня почтовый клиент Outlook для телефона не распознавал нормально вложения при кодировании их uuencode.

Mutt крут

  • Ему не нужен uuencode для вложений, он использует актуальный MIME.
  • Есть крутые штуки. Например, используя опции -c/-b можно отправлять копии. По опции -c обычные, по -b – скрытые. Из man:
-b address - Specify a blind-carbon-copy (BCC) recipient
-c address - Specify a carbon-copy (CC) recipient

Простой пример отправки текста с subject на определенную почту через Mutt:

echo "test text" | mutt -s "test subj" petr@redkin.net

Меняем адрес источника:

echo "test text" | mutt -s "test subj" -e 'my_hdr From:obama@whitehouse.org' petr@redkin.net

Добавляем вложение:

echo "test text" | mutt -s "test subj" petr@redkin.net -a file

Текст через файл + вложение + тема (-s) + основной получатель + копия (-c) + два скрытых получателя (-b)

mutt -s "test mail subj" test@test.ru -c test1@test.ru -b test2@test.ru -b test3@test.ru -a /home/test/test.xls </home/test/test

Если при отправке выдает ошибку 127, то самое простое – поставить ssmtp и настраиваем отправку через него.

Error sending message, child exited 127 (Exec error.).

sudo apt-get install ssmtp
Mail

#attachment Вывод скрипта как Body, attach через опцию. Attach можно прикрепить несколько используя опцию -a (-a <attach> -a <attach2>).

ruby script.rb | mail -a attach.csv -s "Subject" mail@mail.ru
ssmtp

Использовал ssmtp для отправки почты с серверов, как для Ubuntu, так и для CentOS.

Ставим:

sudo yum install ssmtp

Добавляем свои настройки в файл /etc/ssmtp/ssmtp.conf:

root=<login>@post.ru
AuthUser=<login>
AuthPass=<pass>
mailhub=smtp.post.ru
rewriteDomain=corbina.ru

В случае если username отличается от твоей учетки на почте (например, запускает user login_new, а почта login), нужно добавить alias файле /etc/ssmtp/revaliases. В противном случае почта в поле FROM будет иметь адрес не отправителя, а “username”@domain, что может послужить помещением письма в спам/отбросом письма.

<login_new>:<login>@corbina.ru:smtp.corbina.ru

Базовая отправка:

echo "Hi!" | ssmtp petr@redkin.net

Отправка со всеми полями (from/to/subject). Заполняем файл, а потом “скармливаем” его smtp:

$ cat test
To: petr@redkin.net
From: <login>@corbina.net
Subject: Test Subj

ssmtp -s petr@redkin.net <test

Для дебага используем опцию -v:

ssmtp -v -s petr@redkin.net <test
...

#attachment Отправка вложений ssmtp + uuencode:

(cat msg; uuencode result.csv result.csv) | ssmtp petr@redkin.net

Leave a Reply