Терминология, протоколы, описание работы
- 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 запись
PTR запись — обратная DNS-запись, связывающая IP-адрес сервера с его каноническим именем (доменом). Широко используется при фильтрации почты. Если вы хотите, чтобы письма, отправленные с вашего сервера, благополучно достигали адресата, пропишите для сервера корректную 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]
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
#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