---
description: 'Эта глава содержит базовое введение в настройку почтового сервера на FreeBSD, а также основы отправки и получения электронной почты с использованием FreeBSD'
next: books/handbook/network-servers
params:
  path: /books/handbook/mail/
part: 'IV. Сетевое взаимодействие'
prev: books/handbook/ppp-and-slip
showBookMenu: 'true'
tags: ["mail", "sendmail", "dma", "MTA", "SMTP", "mail user agents", "fetchmail", "procmail", "alpine", "mutt", "postfix"]
title: 'Глава 31. Электронная почта'
weight: 36
---

[[mail]]
= Электронная почта
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 31
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/mail/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[mail-synopsis]]
== Обзор

"Электронная почта", более известная как email, является одним из самых распространённых средств связи в наши дни. Эта глава даёт базовое введение в настройку почтового сервера на FreeBSD, а также основы отправки и получения электронной почты с использованием FreeBSD. Для полного ознакомления с темой обратитесь к книгам, перечисленным в crossref:bibliography[bibliography,Библиография].

Эта глава охватывает:

* Какие программные компоненты участвуют в отправке и получении электронной почты.
* Как настроить DragonFly Mail Agent.
* Где расположены основные файлы конфигурации Sendmail в FreeBSD.
* Разница между удаленными и локальными почтовыми ящиками.
* Как установить и настроить альтернативный агент передачи почты (MTA), заменяющий DragonFly Mail Agent или Sendmail.
* Как устранить распространённые проблемы с почтовым сервером.
* Как настроить Sendmail только для отправки почты.
* Как настроить аутентификацию SMTP для повышения безопасности в Sendmail.
* Как установить и использовать почтовый клиент, например mutt, для отправки и получения электронной почты.
* Как загружать почту с удаленного POP или IMAP сервера.
* Как автоматически применять фильтры и правила к входящей почте.

[[mail-using]]
== Компоненты почты

В процессе обмена электронной почтой участвуют пять основных компонентов: почтовый пользовательский агент (MUA), агент пересылки почты (MTA), почтовый хост, удалённый или локальный почтовый ящик и DNS. В этом разделе представлен обзор этих компонентов.

Почтовый клиент (MUA)::
Почтовый клиент (Mail User Agent — MUA) — это приложение, используемое для создания, отправки и получения электронных писем. Это может быть программа командной строки, например встроенная утилита `mail` или стороннее приложение из коллекции портов, такое как alpine, elm или mutt. В коллекции портов также доступны десятки графических программ, включая Claws Mail, Evolution и Thunderbird. Некоторые организации предоставляют веб-почту, доступную через браузер. Дополнительную информацию об установке и использовании MUA в FreeBSD можно найти в crossref:mail[mail-agents, Почтовые клиенты].

Почтовый агент пересылки (MTA)::
Агент пересылки почты (MTA) отвечает за получение входящей почты и отправку исходящей. Начиная с версии FreeBSD 14.0, MTA по умолчанию — DragonFly Mail Agent (man:dma[8]); в более ранних версиях используется man:sendmail[8]. Другие MTA, такие как Exim, Postfix и qmail, могут быть установлены для замены MTA по умолчанию.

Почтовый сервер и почтовые ящики::
Почтовый сервер — это сервер, отвечающий за доставку и получение почты для хоста или сети. Почтовый сервер собирает всю почту, отправленную в домен, и сохраняет её либо в формате `mbox` по умолчанию, либо в альтернативном формате Maildir, в зависимости от конфигурации. После сохранения почты её можно прочитать локально с помощью почтового клиента или удалённо получить с использованием протоколов, таких как POP или IMAP. Если почта читается локально, устанавливать сервер POP или IMAP не требуется.

Система доменных имён (DNS)::
Система доменных имён (DNS) и её демон man:named[8] играют важную роль в доставке почты. Чтобы доставить почту от одного узла к другому, MTA ищет удаленный узел в DNS, чтобы определить, какой хост будет принимать почту для адресата. Этот процесс также происходит, когда почта отправляется с удаленного хоста на MTA.

[[dragonFly-mail-agent]]
== Почтовый агент DragonFly (DMA)

Почтовый агент DragonFly (DMA — DragonFly Mail Agent) — это почтовый агент, используемый в FreeBSD по умолчанию начиная с версии 14.0. man:dma[8] представляет собой небольшой почтовый транспортный агент (MTA), предназначенный для домашнего и офисного использования. Он принимает почту от локально установленных почтовых пользовательских агентов и доставляет её либо локально, либо удалённо. Удалённая доставка включает в себя такие функции, как поддержка TLS/SSL и аутентификация SMTP.

man:dma[8] не предназначен в качестве замены полноценным, крупным MTA, таким как man:sendmail[8] или man:postfix[1]. Следовательно, man:dma[8] не прослушивает порт 25 для входящих соединений.

[[configuring-dragonfly-mail-agent]]
=== Настройка почтового агента DragonFly

DMA поставляется с конфигурацией по умолчанию, которая подходит для многих вариантов установки. Пользовательские настройки определяются в [.filename]#/etc/dma/dma.conf#, а аутентификация SMTP настраивается в [.filename]#/etc/dma/auth.conf#.

[[configuring-gmail-dma]]
==== Использование DMA для маршрутизации исходящей почты через Gmail (пример STARTTLS:SMTP)

Этот пример [.filename]#/etc/dma/dma.conf# можно использовать для отправки почты через SMTP-серверы Google.

[.programlisting]
....
SMARTHOST smtp.gmail.com
PORT 587
AUTHPATH /etc/dma/auth.conf
SECURETRANSFER
STARTTLS
MASQUERADE username@gmail.com
....

Аутентификацию можно настроить одной строкой в [.filename]#/etc/dma/auth.conf#:

[.programlisting]
....
username@gmail.com|smtp.gmail.com:password
....

[NOTE]
====
Если у вас включена двухфакторная аутентификация, потребуется сгенерировать пароль для приложения, так как обычный пароль для входа будет отклонён. Дополнительную информацию о https://myaccount.google.com/apppasswords[паролях для приложений] смотрите в документации Google.
====

Выполните следующую команду для проверки конфигурации:

[source, shell]
....
% echo this is a test | mail -v -s testing-email username@gmail.com
....

[[configuring-fastmail-dma]]
==== Использование DMA для маршрутизации исходящей почты через Fastmail (пример SSL/TLS)

Этот пример [.filename]#/etc/dma/dma.conf# можно использовать для отправки почты через SMTP-серверы Fastmail.

[.programlisting]
....
SMARTHOST smtp.fastmail.com
PORT 465
AUTHPATH /etc/dma/auth.conf
SECURETRANSFER
MAILNAME example.server.com
....

Аутентификацию можно настроить одной строкой в [.filename]#/etc/dma/auth.conf#:

[.programlisting]
....
username@fastmail.com|smtp.fastmail.com:password
....

Выполните следующую команду для проверки конфигурации:

[source, shell]
....
% echo this is a test | mail -v -s testing-email username@fastmail.com
....

[[configuring-custom-dma]]
==== Использование DMA для маршрутизации исходящей почты через пользовательский почтовый хост

Этот пример [.filename]#/etc/dma/dma.conf# можно использовать для отправки почты через пользовательский почтовый сервер.

[.programlisting]
....
SMARTHOST mail.example.org
PORT 587
AUTHPATH /etc/dma/auth.conf
SECURETRANSFER
STARTTLS
....

Аутентификацию можно настроить одной строкой в [.filename]#/etc/dma/auth.conf#:

[.programlisting]
....
username@example.org|mail.example.org:password
....

Выполните следующую команду для проверки конфигурации:

[source, shell]
....
% echo this is a test | mail -v -s testing-email username@example.org
....

[[sendmail]]
== Sendmail

Sendmail - это старейший и многофункциональный агент пересылки почты (MTA) с долгой историей в UNIX(R) и UNIX-подобных системах. Он входил в базовую систему FreeBSD вплоть до версии 13, предоставляя надёжные возможности транспортировки почты, широкие варианты настройки и поддержку сложной маршрутизации и фильтрации.

[[configuring-sendmail]]
=== Файлы конфигурации

Конфигурационные файлы Sendmail находятся в [.filename]#/etc/mail/#.

[.filename]#/etc/mail/access#::
Этот файл базы данных доступа определяет, какие хосты или IP-адреса имеют доступ к локальному почтовому серверу и какой тип доступа им предоставлен. Хосты, указанные как `OK` (что является опцией по умолчанию), могут отправлять почту на этот хост при условии, что конечный пункт назначения почты — локальная машина. Хосты, указанные как `REJECT`, отклоняются для всех почтовых соединений. Хосты, указанные как `RELAY`, могут отправлять почту для любого адресата через этот почтовый сервер. Хосты, указанные как `ERROR`, получат возврат своей почты с указанной почтовой ошибкой. Если хост указан как `SKIP`, Sendmail прервет текущий поиск для этой записи без принятия или отклонения почты. Сообщения хостов, указанных как `QUARANTINE`, будут задержаны и хосты получат указанный текст в качестве причины задержки.
+
Примеры использования этих параметров для адресов IPv4 и IPv6 можно найти в образце конфигурации FreeBSD, [.filename]#/etc/mail/access.sample#:
+
Для настройки базы данных доступа используйте формат, приведённый в примере, чтобы внести записи в [.filename]#/etc/mail/access#, но не ставьте символ комментария (`+#+`) перед записями. Создайте запись для каждого хоста или сети, для которых нужно настроить доступ. Отправители почты, соответствующие левой части таблицы, будут обработаны согласно действию, указанному в правой части таблицы.
+
При каждом обновлении этого файла обновите его базу данных и перезапустите Sendmail:
+
[source, shell]
....
# makemap hash /etc/mail/access < /etc/mail/access
# service sendmail restart
....

[.filename]#/etc/mail/aliases#::
Этот файл базы данных содержит список виртуальных почтовых ящиков, которые преобразуются в пользователей, файлы, программы или другие псевдонимы. Вот несколько записей, иллюстрирующих формат файла:
+
[.programlisting]
....
root: localuser
ftp-bugs: joe,eric,paul
bit.bucket:  /dev/null
procmail: "|/usr/local/bin/procmail"
....
+
Имя почтового ящика слева от двоеточия раскрывается в целевые адреса справа. Первая запись раскрывает почтовый ящик `root` в почтовый ящик `localuser`, который затем ищется в базе данных [.filename]#/etc/mail/aliases#. Если совпадение не найдено, сообщение доставляется в `localuser`. Вторая запись показывает почтовый список. Письма для `ftp-bugs` раскрываются в три локальных почтовых ящика: `joe`, `eric` и `paul`. Удалённый почтовый ящик может быть указан как _user@example.com_. Третья запись демонстрирует, как записывать почту в файл, в данном случае [.filename]#/dev/null#. Последняя запись показывает, как отправить почту в программу [.filename]#/usr/local/bin/procmail# через UNIX(R)-канал. Дополнительную информацию о формате этого файла можно найти в man:aliases[5].
+
Всякий раз, когда этот файл обновляется, выполните `newaliases` для обновления и инициализации базы данных псевдонимов.

[.filename]#/etc/mail/sendmail.cf#::
Это основной конфигурационный файл для Sendmail. Он определяет общее поведение Sendmail, включая все — от перезаписи email-адресов до вывода сообщений об отказе для удалённых почтовых серверов. Соответственно, этот конфигурационный файл довольно сложен. К счастью, для стандартных почтовых серверов его редко требуется изменять.
+
Основной конфигурационный файл Sendmail может быть создан из макросов man:m4[1], определяющих функции и поведение Sendmail. Подробности можно найти в [.filename]#/usr/src/contrib/sendmail/cf/README#.
+
Всякий раз, когда в этот файл вносятся изменения, Sendmail необходимо перезапустить, чтобы изменения вступили в силу.

[.filename]#/etc/mail/virtusertable#::
Этот файл базы данных сопоставляет почтовые адреса виртуальных доменов и пользователей с реальными почтовыми ящиками. Эти почтовые ящики могут быть локальными, удалёнными, алиасами, определёнными в [.filename]#/etc/mail/aliases#, или файлами. Это позволяет размещать несколько виртуальных доменов на одной машине.
+
FreeBSD предоставляет пример файла конфигурации в [.filename]#/etc/mail/virtusertable.sample#, который дополнительно демонстрирует его формат. В следующем примере показано, как создавать пользовательские записи с использованием этого формата:
+
[.programlisting]
....
root@example.com                root
postmaster@example.com          postmaster@noc.example.net
@example.com                    joe
....
+
Этот файл обрабатывается по принципу первого совпадения. Когда электронный адрес соответствует адресу слева, он сопоставляется с локальным почтовым ящиком, указанным справа. Формат первой записи в этом примере сопоставляет конкретный электронный адрес с локальным почтовым ящиком, тогда как формат второй записи сопоставляет конкретный электронный адрес с удалённым почтовым ящиком. Наконец, любой электронный адрес из `example.com`, который не совпал ни с одной из предыдущих записей, будет соответствовать последнему сопоставлению и отправлен в локальный почтовый ящик `joe`. При создании пользовательских записей используйте этот формат и добавляйте их в [.filename]#/etc/mail/virtusertable#. При каждом редактировании этого файла обновите его базу данных и перезапустите Sendmail:
+
[source, shell]
....
# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
# service sendmail restart
....

[.filename]#/etc/mail/relay-domains#::
В стандартной установке FreeBSD Sendmail настроен так, чтобы отправлять почту только с хоста, на котором он работает. Например, если доступен POP-сервер, пользователи смогут проверять почту с удалённых устройств, но не смогут отправлять письма извне. Обычно через некоторое время после попытки отправки придёт письмо от `MAILER-DAEMON` с сообщением `5.7 Relaying Denied`.
+
Наиболее простое решение — добавить полное доменное имя (FQDN) провайдера в [.filename]#/etc/mail/relay-domains#. Если требуется добавить несколько адресов, укажите их по одному на строку:
+
[.programlisting]
....
your.isp.example.com
other.isp.example.net
users-isp.example.org
www.example.org
....
+
После создания или редактирования этого файла перезапустите Sendmail с помощью команды `service sendmail restart`.
+
Теперь любая почта, отправленная через систему с любого хоста из этого списка, при условии, что у пользователя есть учётная запись в системе, будет доставлена успешно. Это позволяет пользователям отправлять почту с системы удаленно, не открывая систему для ретрансляции спама из Интернета.

[[mail-changingmta]]
== Изменение агента передачи почты

Начиная с версии FreeBSD 14.0, man:dma[8] является MTA по умолчанию, а до версии 14.0 MTA по умолчанию — man:sendmail[8]. Однако системный администратор может изменить MTA системы. Широкий выбор альтернативных MTA доступен в категории `mail` коллекции портов FreeBSD.

[WARNING]
====
Если исходящая почтовая служба по умолчанию отключена, важно заменить её альтернативной системой доставки почты. В противном случае системные функции, такие как man:periodic[8], не смогут отправлять свои результаты по электронной почте. Многие части системы предполагают наличие работоспособного MTA. Если приложения продолжат использовать стандартные исполняемые файлы для отправки почты после их отключения, письма могут попасть в неактивную очередь и никогда не быть доставлены.
====

[[replace-sendmail-dma]]
=== Замена Sendmail на другой MTA

Чтобы полностью отключить man:sendmail[8], выполните следующие команды:

[source, shell]
....
# sysrc sendmail_enable="NO"
# sysrc sendmail_submit_enable="NO"
# sysrc sendmail_outbound_enable="NO"
# sysrc sendmail_msp_queue_enable="NO"
....

Чтобы отключить только службу входящей почты man:sendmail[8], выполните следующую команду:

[source, shell]
....
# sysrc sendmail_enable="NO"
....

Затем остановите службу man:sendmail[8]:

[source, shell]
....
# service sendmail onestop
....

Для корректной работы некоторых программ может потребоваться дополнительная настройка, так как man:sendmail[8] настолько распространён, что многие приложения предполагают его наличие и предварительную конфигурацию. Проверьте файл [.filename]#/etc/periodic.conf# и убедитесь, что указанные ниже параметры установлены в значение `NO`. Если файл не существует, создайте его и добавьте следующие записи:

[.programlisting]
....
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
....

Следующий шаг — установка другого MTA, в данном примере будет использоваться man:dma[8]. Как упоминалось выше, man:dma[8] является MTA по умолчанию в FreeBSD начиная с версии 14.0. Следовательно, установка из портов требуется только при использовании более ранней версии.

Для установки выполните следующую команду:

[source, shell]
....
# pkg install dma
....

Выполните настройку, как указано в разделе crossref:mail[configuring-dragonfly-mail-agent, Настройка почтового агента DragonFly (DMA)].

Затем измените все записи в файле [.filename]#/etc/mail/mailer.conf# на man:dma[8]:

[.programlisting]
....
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
# If dma(8) is installed, an example mailer.conf that uses dma(8) instead can
# be found in /usr/share/examples/dma
#
sendmail        /usr/local/libexec/dma
mailq           /usr/local/libexec/dma
newaliases      /usr/local/libexec/dma
....

[NOTE]
====
При использовании версии man:dma[8], включенной в базовую систему, пути изменятся на [.filename]#/usr/libexec/dma#.
====

Чтобы обеспечить сброс всего, что находится в очереди, при загрузке или перед завершением работы, выполните следующую команду:

[source, shell]
....
# sysrc dma_flushq_enable="YES"
....

После завершения настройки рекомендуется перезагрузить систему. Перезагрузка позволяет убедиться, что система корректно настроена для автоматического запуска нового MTA при загрузке.

[[replace-dma]]
=== Замена почтового агента DragonFly (DMA) на другой MTA

Как упоминалось выше, начиная с FreeBSD версии 14.0, MTA по умолчанию — DMA. В этом примере будет использоваться package:mail/postfix[] в качестве альтернативного MTA.

Перед установкой пакета package:mail/postfix[] требуется дополнительная настройка. Проверьте файл [.filename]#/etc/periodic.conf# и убедитесь, что указанные значения установлены в `NO`. Если файл не существует, создайте его со следующими записями:

[.programlisting]
....
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
....

Затем установите пакет package:mail/postfix[]:

[source, shell]
....
# pkg install postfix
....

Чтобы запустить пакет package:mail/postfix[] при загрузке системы, выполните следующую команду:

[source, shell]
....
# sysrc postfix_enable="YES"
....

[TIP]
====
Хорошей практикой является прочтение сообщения после установки приложения. Оно содержит полезную информацию о настройках и т.д.
====

Если postfix *ещё не* активирован в [.filename]#/usr/local/etc/mail/mailer.conf#, выполните следующие команды:

[source, shell]
....
mv /usr/local/etc/mail/mailer.conf /usr/local/etc/mail/mailer.conf.old
install -d /usr/local/etc/mail
install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf
....

При использовании SASL убедитесь, что postfix имеет доступ на чтение файла sasldb. Это достигается добавлением postfix в группу mail и установкой прав на чтение для группы mail для файлов [.filename]#/usr/local/etc/sasldb*# (это должно быть настроено по умолчанию при новых установках).

После завершения настройки рекомендуется перезагрузить систему. Перезагрузка позволяет убедиться, что система корректно настроена для автоматического запуска нового MTA при загрузке.

[[mail-agents]]
== Почтовые клиенты

MUA — это приложение, используемое для отправки и получения электронной почты. По мере того как электронная почта «развивается» и становится сложнее, MUA становятся всё более мощными и предоставляют пользователям больше функциональности и гибкости. В категории `mail` коллекции портов FreeBSD содержится множество MUA. Среди них есть графические клиенты электронной почты, такие как Evolution или Balsa, а также консольные клиенты, такие как mutt или alpine.

[[mail-command]]
=== mail

man:mail[1] — это почтовый клиент (MUA), установленный в FreeBSD по умолчанию. Это консольный MUA, предоставляющий базовые функции для отправки и получения текстовых электронных писем. Он имеет ограниченную поддержку вложений и может работать только с локальными почтовыми ящиками.

Хотя man:mail[1] изначально не поддерживает взаимодействие с серверами POP или IMAP, эти почтовые ящики могут быть загружены в локальный `mbox` с помощью таких приложений, как fetchmail или getmail.

Для отправки и получения электронной почты запустите man:mail[1]:

[source, shell]
....
% mail
....

Содержимое почтового ящика пользователя в [.filename]#/var/mail# автоматически читается утилитой man:mail[1]. Если почтовый ящик пуст, программа завершает работу с сообщением о том, что почта не найдена. Если письма есть, запускается интерфейс приложения и отображается список сообщений.

Сообщения автоматически нумеруются, как видно в следующем примере:

[.programlisting]
....
Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/username": 3 messages 3 new
>N  1 root@localhost        Mon Mar  8 14:05  14/510   "test"
 N  2 root@localhost        Mon Mar  8 14:05  14/509   "user account"
 N  3 root@localhost        Mon Mar  8 14:05  14/509   "sample"
....

Сообщения теперь можно читать, набрав kbd:[t] и затем номер сообщения.

Этот пример читает первое письмо:

[.programlisting]
....
& t 1
Message 1:
From root@localhost  Mon Mar  8 14:05:52 2004
X-Original-To: username@localhost
Delivered-To: username@localhost
To: username@localhost
Subject: test
Date: Mon,  8 Mar 2004 14:05:52 +0200 (SAST)
From: root@localhost (Charlie Root)

This is a test message, please reply if you receive it.
....

Как видно в этом примере, сообщение будет отображено с полными заголовками.

Чтобы снова отобразить список сообщений, нажмите kbd:[h].

Если требуется ответить на письмо, нажмите либо kbd:[R], либо kbd:[r] man:mail[1]. kbd:[R] указывает man:mail[1] ответить только отправителю письма, а kbd:[r] — всем остальным получателям сообщения. Эти команды могут быть дополнены номером письма, на которое нужно ответить. После ввода ответа конец сообщения должен быть обозначен отдельной строкой с kbd:[.].

Пример можно увидеть ниже:

[.programlisting]
....
& R 1
To: root@localhost
Subject: Re: test

Thank you, I did get your email.
.
EOT
....

Чтобы отправить новое письмо, нажмите kbd:[m], затем введите адрес электронной почты получателя. Несколько получателей можно указать, разделяя каждый адрес разделителем kbd:[,]. Затем можно ввести тему сообщения, за которым следует содержимое сообщения. Конец сообщения указывается отдельной строкой с символом kbd:[.].

[.programlisting]
....
& mail root@localhost
Subject: I mastered mail

Now I can send and receive email using mail ... :)
.
EOT
....

При использовании man:mail[1] нажмите kbd:[?], чтобы в любой момент отобразить справку. Дополнительную информацию об использовании man:mail[1] можно найти в man:mail[1].

[NOTE]
====
man:mail[1] не был предназначен для работы с вложениями и поэтому обрабатывает их плохо. Более современные почтовые клиенты (MUA) обрабатывают вложения более разумным способом.
====

[[mutt-command]]
=== Mutt

Mutt - это мощный MUA с множеством функций, включая:

* Возможность группировки цепочек сообщений.
* Поддержку PGP для цифровой подписи и шифрования электронной почты.
* Поддержку MIME.
* Поддержку Maildir.
* Большую гибкость в настройке.

Обратитесь к ссылке link:http://www.mutt.org[http://www.mutt.org] для получения дополнительной информации о Mutt.

[TIP]
====
Стоит упомянуть форк Mutt под названием NeoMutt, который добавляет новые возможности. Подробнее можно узнать по ссылке link:https://neomutt.org/about.html[сайт NeoMutt]. Если выбран NeoMutt, замените следующие примеры команд с `mutt` на `neomutt`.
====

Mutt может быть установлен с использованием порта package:mail/mutt[]. После установки порта Mutt можно запустить, выполнив следующую команду:

[source, shell]
....
% mutt
....

Mutt автоматически прочитает и отобразит содержимое почтового ящика пользователя в [.filename]#/var/mail#. Если письма не найдены, Mutt будет ожидать команд от пользователя. В примере ниже показан список сообщений в Mutt:

image::mutt1.png["Клиент электронной почты Mutt, отображающий список сообщений"]

Чтобы прочитать письмо, выберите его с помощью клавиш курсора и нажмите kbd:[Enter]. Пример отображения письма в Mutt показан ниже:

image::mutt2.png["Почтовый клиент Mutt, отображающий письмо"]

Аналогично man:mail[1], Mutt позволяет отвечать как только отправителю сообщения, так и всем получателям. Чтобы ответить только отправителю письма, нажмите kbd:[r]. Для отправки группового ответа исходному отправителю, а также всем получателям сообщения нажмите kbd:[g].

[NOTE]
====
По умолчанию Mutt использует редактор man:vi[1] для создания и ответа на письма. Каждый пользователь может изменить это, создав или отредактировав файл [.filename]#.muttrc# в своём домашнем каталоге и установив переменную `editor`, либо задав переменную окружения `EDITOR`. Дополнительную информацию о настройке Mutt можно найти на link:http://www.mutt.org/[http://www.mutt.org/].
====

Чтобы создать новое письмо, нажмите kbd:[m]. После ввода корректной темы Mutt запустит man:vi[1] для написания письма. Завершив составление письма, сохраните изменения и выйдите из `vi`. Mutt продолжит работу, отобразив итоговый экран с информацией о письме, готовом к отправке. Для отправки письма нажмите kbd:[y]. Пример итогового экрана показан ниже:

image::mutt3.png["Клиент электронной почты Mutt, отображающий сводный экран"]

Mutt содержит обширную справку, доступ к которой можно получить из большинства меню, нажав kbd:[?]. В верхней строке также отображаются сочетания клавиш, где это уместно.

[[alpine-command]]
=== alpine

alpine ориентирован на начинающего пользователя, но также включает некоторые расширенные возможности.

[WARNING]
====
В прошлом в alpine было обнаружено несколько уязвимостей, позволяющих удалённым злоумышленникам выполнять произвольный код от имени пользователей локальной системы путём отправки специально подготовленного электронного письма. Хотя _известные_ проблемы были исправлены, код alpine написан в небезопасном стиле, и Ответственный за безопасность FreeBSD считает, что, скорее всего, существуют другие необнаруженные уязвимости. Пользователи устанавливают alpine на свой страх и риск.
====

Текущую версию alpine можно установить с помощью порта package:mail/alpine[]. После установки порта alpine можно запустить, выполнив следующую команду:

[source, shell]
....
% alpine
....

При первом запуске alpine отображает приветственную страницу с кратким введением, а также просьбу от команды разработчиков alpine отправить анонимное электронное сообщение, позволяющее им оценить количество пользователей их клиента. Чтобы отправить это анонимное сообщение, нажмите kbd:[Enter]. Или нажмите kbd:[E] для выхода из приветствия без отправки анонимного сообщения. Пример приветственной страницы показан ниже:

image::pine1.png["Почтовый клиент alpine, отображающий приветственную страницу"]

Затем отображается главное меню, в котором можно перемещаться с помощью клавиш-стрелок. Это меню предоставляет быстрый доступ к созданию новых писем, просмотру почтовых каталогов и управлению записями адресной книги. Под главным меню отображаются соответствующие сочетания клавиш для выполнения функций, связанных с текущей задачей.

По умолчанию alpine открывает папку [.filename]#inbox#. Для просмотра списка сообщений нажмите kbd:[I] или выберите пункт [.guimenuitem]#MESSAGE INDEX#, как показано ниже:

image::pine2.png["Почтовый клиент alpine, отображающий стандартный каталог"]

Список сообщений отображает сообщения в текущем каталоге, и по ним можно перемещаться с помощью клавиш-стрелок. Выделенные сообщения можно прочитать, нажав kbd:[Enter].

image::pine3.png["Почтовый клиент alpine, отображающий список сообщений"]

На приведённом ниже снимке экрана отображается пример сообщения в alpine. Контекстные сочетания клавиш показаны в нижней части экрана. Пример одного из сочетаний — kbd:[r], которое указывает почтовому клиенту ответить на текущее отображаемое сообщение.

image::pine4.png["Клиент электронной почты alpine, отображающий письмо"]

Для ответа на письмо в alpine запускается редактор pico, который устанавливается по умолчанию вместе с alpine. pico упрощает навигацию по сообщению и более удобен для начинающих пользователей, чем man:vi[1] или man:mail[1]. После завершения ответа сообщение можно отправить, нажав kbd:[Ctrl+X]. alpine запросит подтверждение перед отправкой сообщения.

image::pine5.png["Почтовый клиент alpine с открытым окном создания сообщения"]

alpine можно настроить с помощью пункта [.guimenuitem]#SETUP# в главном меню.

[[mail-advanced]]
== Сложные темы

Этот раздел охватывает более сложные темы, такие как настройка почты и организация почтовой системы для целого домена.

[[mail-config]]
=== Базовая конфигурация

Без какой-либо настройки можно отправлять электронную почту на внешние хосты, если настроен [.filename]#/etc/resolv.conf# или сеть имеет доступ к настроенному DNS-серверу. Чтобы почта доставлялась на MTA FreeBSD, выполните одно из следующих действий:

* Запустите DNS-сервер для домена.
* Получайте почту напрямую на машину, используя её полное доменное имя.

Для того чтобы почта доставлялась напрямую на хост, у него должен быть постоянный статический IP-адрес, а не динамический. Если система находится за межсетевым экраном, он должен быть настроен для пропуска SMTP-трафика. Чтобы принимать почту напрямую на хосте, необходимо настроить одно из следующих двух условий:

* Убедитесь, что MX-запись с наименьшим номером в DNS указывает на статический IP-адрес хоста.
* Убедитесь, что в DNS для хоста нет записи MX.

Любой из вышеперечисленных вариантов позволит получать почту напрямую на хост.

Попробуйте следующее:

[source, shell]
....
# hostname
....

Вывод должен быть похож на следующий:

[.programlisting]
....
example.FreeBSD.org
....

[source, shell]
....
# host example.FreeBSD.org
....

Вывод должен быть похож на следующий:

[.programlisting]
....
example.FreeBSD.org has address 204.216.27.XX
....

В этом примере письма, отправленные напрямую на mailto:yourlogin@example.FreeBSD.org[yourlogin@example.FreeBSD.org], должны работать без проблем, при условии что полнофункциональный MTA корректно работает на `example.FreeBSD.org`. Обратите внимание, что man:dma[8] не слушает порт 25 для входящих соединений и не может быть использован в данном сценарии.

Для этого примера:

[source, shell]
....
# host example.FreeBSD.org
....

Вывод должен быть похож на следующий:

[.programlisting]
....
example.FreeBSD.org has address 204.216.27.XX
example.FreeBSD.org mail is handled (pri=10) by nevdull.FreeBSD.org
....

Вся почта, отправленная на `example.FreeBSD.org`, будет собираться на `nevdull` под тем же именем пользователя вместо прямой отправки на ваш хост.

Указанная выше информация обрабатывается DNS-сервером. DNS-запись, содержащая информацию о маршрутизации почты, называется link:https://en.wikipedia.org/wiki/MX_record[записью почтового обменника (MX-запись)]. Если MX-запись отсутствует, почта будет доставлена напрямую на хост по его IP-адресу.

Запись MX для `freefall.FreeBSD.org` когда-то выглядела так:

[.programlisting]
....
freefall		MX	30	mail.crl.net
freefall		MX	40	agora.rdrop.com
freefall		MX	10	freefall.FreeBSD.org
freefall		MX	20	who.cdrom.com
....

`freefall` имел множество MX-записей. Наименьший номер MX указывает на хост, который принимает почту напрямую, если он доступен. Если он недоступен по какой-либо причине, следующий хост с меньшим номером временно примет сообщения и передаст их, когда хост с меньшим номером станет доступен.

Альтернативные MX-серверы должны иметь отдельные интернет-подключения для максимальной эффективности. Ваш провайдер может предоставить такую услугу.

[[mail-domain]]
=== Почта для домена

Если MTA настраивается для сети, то любая почта, отправленная на хосты в его домене, должна перенаправляться на этот MTA, чтобы пользователи могли получать свою почту на главном почтовом сервере.

Для максимального удобства учётная запись с тем же _именем пользователя_ должна существовать как на MTA, так и на системе с MUA. Для создания учётных записей используйте man:adduser[8].

[TIP]
====
Помимо добавления локальных пользователей на хост, существуют альтернативные методы, известные как виртуальные пользователи. Такие программы, как link:https://www.cyrusimap.org/[Cyrus] и link:https://www.dovecot.org/[Dovecot], могут быть интегрированы в MTA для управления пользователями, хранения почты, а также предоставления доступа через POP3 и IMAP.
====

Почтовый сервер (MTA) должен быть назначенным почтовым обменником для каждой рабочей станции в сети. Это делается в конфигурации DNS с помощью записи MX:

[.programlisting]
....
example.FreeBSD.org	A	204.216.27.XX		; Workstation
			MX	10 nevdull.FreeBSD.org	; Mailhost
....

Это перенаправит почту для рабочей станции на MTA, независимо от того, куда указывает запись A. Почта отправляется на MX-хост.

Это необходимо настроить на DNS-сервере. Если в сети не запущен собственный DNS-сервер, обратитесь к интернет или DNS-провайдеру.

Ниже приведен пример виртуального хостинга электронной почты.

Рассмотрим клиента с доменом `customer1.org`, где вся почта для `customer1.org` должна отправляться на `mail.myhost.com`.

Запись DNS должна выглядеть следующим образом:

[.programlisting]
....
customer1.org		MX	10	mail.myhost.com
....

Для обработки только электронной почты домена `customer1.org` запись типа `A` _не_ требуется. Однако команда `ping` для `customer1.org` не будет работать, если для этого домена не существует записи `A`.

Укажите MTA, для каких доменов и/или имён хостов следует принимать почту. Для Sendmail подойдет любой из следующих вариантов:

* Добавьте хосты в [.filename]#/etc/mail/local-host-names#, если используется `FEATURE(use_cw_file)`.
* Добавьте строку `Cwyour.host.com` в файл [.filename]#/etc/sendmail.cf#.

[[outgoing-only]]
=== Настройка только для отправки

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

* Компьютер представляет собой настольную машину, которой необходимо использовать программы, такие как man:mail[1], с использованием почтового ретранслятора интернет-провайдера.
* Компьютер является сервером, который не обрабатывает почту локально, а передаёт всю почту релейному серверу для обработки.

Хотя любая MTA способна выполнить эту конкретную задачу, правильная настройка полнофункциональной MTA только для обработки пересылки почты может быть сложной. Такие программы, как Sendmail и Postfix, являются избыточными для такого использования.

Кроме того, стандартное соглашение об услуге доступа в Интернет может запрещать запуск «почтового сервера».

Самый простой способ удовлетворить эти потребности — использовать MTA man:dma[8], входящий в состав crossref:mail[configuring-dragonfly-mail-agent, базовой системы]. Для систем версии до 13.2 необходимо установить его из портов.

В дополнение к man:dma[8], для достижения того же результата можно использовать стороннее программное обеспечение, например package:mail/ssmtp[].

[source, shell]
....
# cd /usr/ports/mail/ssmtp
# make install replace clean
....

После установки пакет package:mail/ssmtp[] можно настроить с помощью файла [.filename]#/usr/local/etc/ssmtp/ssmtp.conf#:

[.programlisting]
....
root=yourrealemail@example.com
mailhub=mail.example.com
rewriteDomain=example.com
hostname=_HOSTNAME_
....

Используйте настоящий адрес электронной почты для `root`. Введите исходящий почтовый релейный сервер вашего интернет-провайдера вместо `mail.example.com`. Некоторые провайдеры называют это "исходящий почтовый сервер" или "SMTP-сервер".

Убедитесь, что Sendmail отключён, включая службу исходящей почты.

package:mail/ssmtp[] предоставляет дополнительные настройки. Для получения дополнительной информации обратитесь к примерам в [.filename]#/usr/local/etc/ssmtp# или к руководству ssmtp.

Настройка ssmtp таким образом позволяет любому программному обеспечению на компьютере, которому требуется отправлять почту, работать корректно, не нарушая политику использования провайдера и не позволяя компьютеру быть захваченным для рассылки спама.

[[SMTP-Auth]]
=== Аутентификация SMTP в Sendmail

Настройка аутентификации SMTP на MTA предоставляет ряд преимуществ. Аутентификация SMTP добавляет уровень безопасности в Sendmail и позволяет мобильным пользователям, меняющим хосты, использовать один и тот же MTA без необходимости перенастраивать параметры почтового клиента каждый раз.

Установите пакет package:security/cyrus-sasl2[] из Коллекции портов. Этот порт поддерживает ряд опций на этапе компиляции. Для метода аутентификации SMTP, демонстрируемого в данном примере, убедитесь, что `LOGIN` не отключен.

После установки пакета package:security/cyrus-sasl2[] отредактируйте файл [.filename]#/usr/local/lib/sasl2/Sendmail.conf# или создайте его, если он не существует, и добавьте следующую строку:

[.programlisting]
....
pwcheck_method: saslauthd
....

Далее установите package:security/cyrus-sasl2-saslauthd[] и выполните следующую команду:

[source, shell]
....
# sysrc saslauthd_enable="YES"
....

Наконец, запустите демон saslauthd:

[source, shell]
....
# service saslauthd start
....

Этот демон служит посредником для Sendmail при аутентификации в базе данных FreeBSD man:passwd[5]. Это избавляет от необходимости создавать новый набор имён пользователей и паролей для каждого пользователя, которому требуется аутентификация SMTP, и позволяет сохранять одинаковые пароли для входа в систему и для почты.

Далее отредактируйте файл [.filename]#/etc/make.conf# и добавьте следующие строки:

[.programlisting]
....
SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDADD=/usr/local/lib/libsasl2.so
....

Эти строки предоставляют Sendmail правильные параметры конфигурации для связи с package:cyrus-sasl2[] во время компиляции. Убедитесь, что package:cyrus-sasl2[] установлен перед перекомпиляцией Sendmail.

Перекомпилируйте Sendmail, выполнив следующие команды:

[source, shell]
....
# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install
....

Эта компиляция не должна вызывать проблем, если [.filename]#/usr/src# не подвергался значительным изменениям и необходимые динамические библиотеки доступны.

После компиляции и переустановки Sendmail отредактируйте файл [.filename]#/etc/mail/freebsd.mc# или локальный файл [.filename]#.mc#. Многие администраторы предпочитают использовать вывод команды man:hostname[1] в качестве имени файла [.filename]#.mc# для обеспечения уникальности.

Добавьте следующие строки:

[.programlisting]
....
dnl set SASL options
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
....

Эти параметры настраивают различные методы, доступные Sendmail для аутентификации пользователей. Чтобы использовать метод, отличный от pwcheck, обратитесь к документации Sendmail.

Наконец, выполните man:make[1] в каталоге [.filename]#/etc/mail#. Это приведёт к обработке нового файла [.filename]#.mc# и созданию файла [.filename]#.cf# с именем [.filename]#freebsd.cf# или именем, использованным для локального файла [.filename]#.mc#.

Затем выполните `make install restart`, что скопирует файл в [.filename]#sendmail.cf# и корректно перезапустит Sendmail.

Для получения дополнительной информации об этом процессе обратитесь к [.filename]#/etc/mail/Makefile#.

Для проверки конфигурации используйте MUA для отправки тестового сообщения. Для более детального анализа установите уровень журналирования (`LogLevel`) Sendmail на `13` и следите за файлом [.filename]#/var/log/maillog# на предмет ошибок.

Для получения дополнительной информации обратитесь к http://www.sendmail.org/~ca/email/auth.html[аутентификации SMTP].
