Настройка MTA Sendmail
Однажды, мне достался в наследство сервер FreeBSD с настроенным sendmail. Из интереса и расширения кругозора я не стал его сразу менять на другой более привычный МТА, а разобрался с существующим и даже сильно улучшил и ускорил его работу. На данный момент из большинсва дистрибутивов убирают mta sendmail. Например, в gnu/linux debian работает exim, а redhat linux отдает предпочтение postfix.
На самом деле после нескольких дней изучения, sendmail мне не показался мне таким уж страшным и ужасным, как раньше.
Sendmail - это монолитная достаточно медленная программа, но основная причина не популярности этого МТА, по моему мнению, кроется в сложности понимания основного конфига и необходимости обеспечивать дополнительный функционал посредством всяких milter. Это все достаточно непросто, требует времени и терпения.
Я буду рассматривать настройку sendmail относительно ОС FreeBSD. Основной конфигурационный файл /etc/mail/freebsd.mc необходимо компилировать с помощью специального компилятора m4 в файл /etc/mail/sendmail.cf, который sendmail в состоянии понять:
$ cd /usr/share/sendmail/cf $ m4 m4/cf.m4 /etc/mail/freebsd.mc > /etc/mail/sendmail.cf
В директории /usr/share/sendmail/cf содержатся небольшие куски для итогового конфигурационного файла /etc/mail/sendmail.cf. То есть фактически мы редактируем понятный для человека файл /etc/mail/freebsd.mc, в котором вызываем различные функции. Потом компилятор m4 превращает эти вызовы в последовательность из кусочков конфигов из /usr/share/sendmail/cf и сохраняет результат в /etc/mail/sendmail.cf. Можно самостоятельно редактировать файл cf, но это мы рассматривать не будем за ненадобностью. Кому интересно, продолжит изучение sendmail самостоятельно.
Sendmail сохраняет почту в одном файле, расположенном по пути /var/mail/username. Способ хранения почты в одном файле давно устарел, потому что:
- Записать в ящик сразу несколько писем нельзя, поэтому MTA будет ждать снятия блокировки с файла для записи следующего сообщения. При этом несколько процессов по количеству доставляемых писем будут висеть в фоне и тратить системные ресурсы, что недопустимо при нынешнем объеме сообщений и количеству пользователей
- Файл со временем будет увеличиваться и его обработка будет занимать существенное время
Лучше всего использовать maildir, но об этом в конце, потому что для этого необходимо задействовать внешнюю программу.
C какими доменами будет работать sendmail.
Для этого заполним файл /etc/mail/local-host-names:
it-e.ru example.com domain.com domain.ru
Назначение псевонимов для адресата.
Заполним файл /etc/aliases. В этом файле мы можем указать альтернативные названия почтовых ящиков:
webmaster: user, user` postmaster: user3 user15: user
После изменения файла необходимо пересобрать файл базы данных /etc/aliases.db. Для этого выполняем команду newaliases.
Виртуалье почтовые ящики
Виртуальные почтовые ящики позволят разделить доставку писем по доменам. Например, необходимо письмо для user@example.com доставить в ящик user, a письмо для user@domain.com в ящик user1. В конфиг:
- FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnl
- Отредактируем файл /etc/mail/virtusertable:
user@example.com user user@domain.com user1 @domain1.com user @domain2.com error:nouser User unknown
Предпоcледняя строка направит всю почту для домена domain1.com в ящик пользователя user. Последняя строка сообщит отправителю, что нет пользователя для домена domain2.com, кроме пользователей явно перечисленных в файле /etc/aliases. Теперь соберем файл:makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
илиcd /etc/mail make
Маршрутизация почтовых сообщений
: Можно явно указывать через какие серверы посылать сообщения для определенных доменов. - FEATURE(mailertable, `hash -o /etc/mail/mailertable')dnl
- /etc/mail/mailertable:
domain.com smtp:[some-server.example.com] domain.org smtp:[10.13.12.11]
Замена адреса отправителя.
Измение адреса отправителя при отправке.FEATURE(`genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/generics-domains')
/etc/mail/generics-domains:user user@domain.com user1 user1@domain1.com
Работа с другими серверами. Пересылка и получение писем.
Пересылка и получение писем управляется посредством файла /etc/mail/access. По умолчанию пересылка разрешена для localhost, а приём разрешен ото всех:localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 192.168.12 RELAY A.B.C.D REJECT A1.B1.C1.D1 ERROR:"550 We don't accept mail from A1.B1.C1.D1" A.B.C.D1 OK OK - Принять почтовое ссобщение. RELAY - Принять почтовое сообщение с машины, сети или пользователя, если оно не предназначено для этой машины, то есть принять сообщение для пересылки другим хостам. REJECT - Отклонить получение сообщения с стандартным сообщением об ошибке. DISCARD - Отклонить сообщение без собщения.
Я добавил адреса моей локальной сети. Теперь sendmail будет пересылать без авторизации сообщения, которые поступили с localhost, 127.0.0.1 и 192.168.12.0/24. Для адреса A.B.C.D наш МТА будет отвергать почту, а для адреса A1.B1.C1.D1 будем выводить сообщение "550 We don't accept mail from A1.B1.C1.D1", а для адреса A.B.C.D1 будем принимать почту в любом случае. Соберем файл:$ makemap hash /etc/mail/access < /etc/mail/access
Так же в файле /etc/mail/access можно настроить различные сообщения при приеме почты для определенных пользователей: - FEATURE(blacklist_recipients)
-
daemon 550 Daemon does not accept or read mail. max 550 Mail for this user has been administratively disabled. user@examole.com 550 Mail disabled for this recipient.
Правила обработки почтовых сообщений настроены. Теперь пришло время настроить работу МТА, хотя с конфигом, который идет в поставке, почта уже будет ходить.
Общаю внимание, что конфигурационный файл очень чувствителен к синтаксису! Закомментируем строку конфигурациооного файла. Для этого в начале строки пишем dnl # или dnl.Минимальный рабочий конфигурационный файл должен выглядеть приблизительно так:
divert(-1) Тут можно указать общие комментарии к конфигу. divert(0) VERSIONID(`номер версии') OSTYPE(freebsd6) dnl - укажет в какой ОС работает sendmail, чтобы он ен перепутал пути и т.д.dnl DOMAIN(generic)dnl dnl можно указать насильно DOMAIN(`it-e.ru'). определяет с каким доменом работать, если он не указан. FEATURE(access_db, `hash -o -T /etc/mail/access') FEATURE(blacklist_recipients) FEATURE(local_lmtp)dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable') FEATURE(virtusertable, `hash -o /etc/mail/virtusertable') define(`confCW_FILE', `-o /etc/mail/local-host-names') DAEMON_OPTIONS(`Name=IPv4, Family=inet')dnl работать с ipv4 DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')dnl работать с ipv6 define(`confBIND_OPTS', `WorkAroundBrokenAAAA') define(`confNO_RCPT_ACTION', `add-to-undisclosed') define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') MAILER(local) MAILER(smtp)
Теперь подключим дополнительные функции
:Подключим авторизацию пользователя для отправки сообщений из недоверенных сетей
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
Небольшой исторический факт: когда ещё не было авторизации, существовал метод авторизации APOP. При использовании этого метода, пользователь авторизировался на pop сервере, который определял ip адрес и заносил его в файл access. И убирал его через некоторое время, как потерявший доверие.Шифрование соединения
Создадим самоподписные сертификаты:mkdir -p /etc/mail/certs cd /etc/mail/certs openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 365 openssl req -nodes -new -x509 -keyout sendmail.pem -out sendmail.pem -days 365 openssl x509 -noout -text -in sendmail.pem
Обратите внимание, что права на чтение сертификаты дожны быть только у владельца, иначе sendmail не будет предлагать использовать starttls и ssl.
Подключим в конфиге:dnl define(`confCACERT_PATH', `/etc/mail/certs')dnl dnl define(`confCACERT', `/etc/mail/certs/cacert.pem')dnl dnl define(`confSERVER_CERT', `/etc/mail/certs/sendmail.pem')dnl dnl define(`confSERVER_KEY', `/etc/mail/certs/sendmail.pem')dnl dnl define(`confCLIENT_CERT', `/etc/mail/certs/sendmail.pem')dnl dnl define(`confCLIENT_KEY', `/etc/mail/certs/sendmail.pem')dnl dnl DAEMON_OPTIONS(`Family=inet, Port=465, Name=MTA-SSL, M=s')dnl
Заставить работать Sendmail только по адресу 127.0.0.1
- DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
- Можно сделать через tcpwrapper: в /etc/hosts.deny напишем ALL:ALL.
Клиент с русскими буквами
Часто компьютеры под управленим windows представляются русскими буквами, что не соответствует RFC, поэтому стоит разрешить некорректные hello: - define(`confALLOW_BOGUS_HELO', `bool')
-
Рассмотрим каким образом подключаются milter's
- S= - описание сокета
Этот аргумент указывает как sendmail должен полключаться к milter. Если подключение осуществляется через sockets, то пишем unix:путь к сокету, для подключения через tcp/ip пишем inet: порт@хост, точно также для ipv6 - inet6. - F= что делать, если milter не работает
Этот аргумент говорит sendmail как вести себя при некорректной работе milter. F=T используется, чтобы sendmail временно отвергал почтовые сообщения, пока milter не будет снова корректно работать, то есть ошибка 4хх. F=R испольльзуется, чтобы sendmail отвергал почту с удалением, пока milter не будет снова корректно работать, то есть ошибка 5хх. Используйте F= , что бы sendmail продолжал приём почтовых сообщений без обработки их milter. - T= таймауты
Этот аргумент указывает сколько времени sendmail должен ждать ответа от milter до констатации некорректной работы milter. S:X - сколько времени могут отправляться данные на обработки milter, R:X - в течении какого времени milter должен прислать ответ, E:X время ожидания для окончательной отправки сообщения. Также существует C:X сумманое время для отпраки и чтения ответа с milter. Если не определять этот тайм аут, то sendmail будет использовать 10 секунд для отправки и чтения, и 5 минут для подключения и подверждения. Например,INPUT_MAIL_FILTER(`mymilter', `S=unix:/path/to/mymilter.sock, F=T, T=S:60s;R:60s;E:5m')dnl
Проверка почты антивирусом ClamAV
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/milter.sock,F=T,T=S:4m;R:4m;E:10m')dnl define(`confINPUT_MAIL_FILTERS',`clmilter')dnl
cd /usr/ports/security/clamav-milter/work/clamav-0.97.6/test cat clam.exe | mail root -s "Testing"Проверка почты антиспамом SpamAssassin
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=T,T=S:4m;R:4m')dnl define(`confINPUT_MAIL_FILTERS', `spamassassin')
Проверить можно командой: echo "Testing spamass-milter..." | mail -s"Spam test". В заголовках, пришедшего письма, должно быть примерно следующее:X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=unavailable version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on it-e.ru
И если похожая запись есть, то работает. Остается настроить обучающие ящики...Greylisting
При установке milter-greylist может возникнуть конфликт, если у вас установлен отличный от sendmail порт (например, sendmail+tls+sasl). Я ремендую устанавливать sendmail так$ cd /usr/ports/mail/sendmail $ make SENDMAIL_WITH_TLS=yes SENDMAIL_WITH_SASL2=yes install $ cd /usr/ports/mail/milter-greylist $ make install
В /etc/make.conf:NO_SENDMAIL="TRUE" WITH_SENDMAIL_PORT=yes
Настройка greylisting:cp /usr/local/share/examples/milter-greylist/greylist.conf /usr/local/etc/mail/ /usr/local/etc/rc.d/milter-greylist onestart INPUT_MAIL_FILTER(`milter-greylist', `S=local:/var/milter-greylist/milter-greylist.sock,F=T,T=S:1m;R:1m')dnl define(`confMILTER_MACROS_CONNECT', `j, {if_addr}')dnl define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')dnl define(`confMILTER_MACROS_ENVRCPT', `{greylist}')dnl INPUT_MAIL_FILTER(`milter-clamav',`S=local:/var/run/clamav/clmilter.sock,F=T,T=S:4m;R:4m;E:10m')dnl define(`confINPUT_MAIL_FILTERS',`milter-clamav,milter-greylist')dnl
Черные списки отправителей для простой защиты от спама
FEATURE(dnsbl, `bl.spamcop.net', `"550 Mail from " $&{client_addr} " rejected by bl.spamcop.net')dnl FEATURE(dnsbl, `cbl.abuseat.org', `"550 Mail from " $&{client_addr} " rejected by cbl.abuseat.org')dnl FEATURE(dnsbl, `dnsbl.njabl.org', `"550 Mail from " $&{client_addr} " rejected by dnsbl.njabl.org')dnl FEATURE(dnsbl, `dnsbl.sorbs.net', `"550 Mail from " $&{client_addr} " rejected by dnsbl.sorbs.net')dnl FEATURE(dnsbl, `zen.spamhaus.org', `"550 Mail from " $&{client_addr} " rejected by zen.spamhaus.org')dnl FEATURE(dnsbl, `dialups.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected by dialups.mail-abuse.org')dnl FEATURE(dnsbl, `cn.countries.nerd.dk', `"550 Mail from " $&{client_addr} " rejected by jp.countrieas.nerd.dk')dnl FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected by mail-abuse.org')dnl
Что ещё можно добавить для борьмы со спам-трафиком:Не проверять спам для домена
:FEATURE(`delay_checks')
В access:Spam:mydomain.ru FRIEND. Сonnect:mydomain.ru OK
Все сообщения принятые с домена mydomain.ru проверяться на спам не будут.Задержка перед началом работы.
:FEATURE(`greet_pause',`5000')dnl
В access:GreetPause:127.0.0.1 0 GreetPause:192.168.0 0 GreetPause:frienddomain.ru 0 GreetPause:enemydomain.com 60000
Теперь почтовый сервер, работающий с доменом enemydomain.com, может начать обмениваться с нашим сервером по истечении 60 секунд. Теперь настроим временные интервалы для различных случаев, которые помогут нашему сервису быстрее отказываться от долгих, тратящих наши ресурсы, соединений:define(`confTO_CONNECT', `30s')dnl define(`confTO_IDENT', `0')dnl define(`confTO_COMMAND', `30s')dnl define(`confTO_DATABLOCK', `2m')dnl define(`confTO_STARTTLS', `2m')dnl define(`confTO_QUEUEWARN', `16h')dnl define(`confTO_QUEUERETURN', `3d')dnl define(`confCON_EXPENSIVE', `True')dnl define(`confCHECKPOINT_INTERVAL',`500')dnl
Это иногда помогает, потому что спамеры как правило очень торопятся и экономят ресурсы, поэтому им некогда ждать начала соединения с долго отвечающим почтовым сервером. Последняя опция отвечает за какое время будет сброшен дамп очереди на диск, можно увеличивать это значение, что позволит существенно разгрузить дисковую систему, но при внезапном отключении машины, можем потерть часть очереди.Изменение сообщения при подключении
define(`confSMTP_LOGIN_MSG', `220 $hostname ESMTP Postfix')dnl FEATURE(`promiscuous_relay') Проверка информации об отправителе define(`confBAD_RCPT_THROTTLE', `1')dnl - число неплавильных адресов define(`confMAX_RCPTS_PER_MESSAGE', `20')dnl - максимальное число не существующих получаетелей в письме. Разрешить пересылку почты только с обслуживаемых доменов, то есть не пересылать почту от доверенных клиентов с неизвестнми доменами: FEATURE(`relay_entire_domain') Разрешить пересылку с нашего сервера на другие севрера, которые имеют запись MX: FEATURE(`relay_based_on_MX') Закомментируем: dnl FEATURE(`accept_unresolvable_domains')dnl FEATURE(`block_bad_helo')dnl Настроим производительность, чтобы наш сервер не перенапрягался =):define(`confMAX_DAEMON_CHILDREN', 12) - максимальное число процессов. Каждый процесс 1,5-2,5 Мб. define(`confCONNECTION_RATE_THROTTLE', 5) - число коннектов в секунду
define(`confSEPARATE_PROC',`true')dnl define(`confHOST_STATUS_DIRECTORY',`/var/run/.hoststat')dnl define(`confFORWARD_PATH',`')dnlКол-во получателей для каждого письма не более 10
: - define(`confMAX_RCPTS_PER_MESSAGE', `10')dnl
- Максимальный размер письма 10 MБ:
- define(`confMAX_MESSAGE_SIZE', `20971520')dnl
-
Посылать все сообщения через релей
: - define(`SMART_HOST',`smarphost.example.com')dnl
-
Посылать сообщения на определенный порт для определнного домена
: -
В sendmail.cf определяем транспорт:
#########esmtp on port 587#### Mesmtp587, P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990, T=DNS/RFC822/SMTP, A=TCP $h 587
Далее в mailertable определяете способ доставки писем для этого домена:it-e.ru esmtp587:1.2.3.4
Собираем базу:makemap hash /etc/mail/mailertable < /etc/mail/mailertable
-
Изменять домен отправителя
FEATURE(`masquerade_envelope')dnlMASQUERADE_AS(your-domain.com) MASQUERADE_DOMAIN(your-domain.com) MASQUERADE_DOMAIN(virt-domain-1.com) MASQUERADE_DOMAIN(virt-domain-2.com) ... .. FEATURE(masquerade_entire_domain) FEATURE(masquerade_envelope)
Работает от пользователя: smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin Можно сделать специальный шел для sendmail FEATURE(`smrsh',`/usr/sbin/smrsh')dnl и в этом шелле перечислить команды, которе разрешено использовать. Sendmail config: /etc/mail/sendmail.mc: Directive Description divert(-1) m4 macro directive. File output not diverted OSTYPE(`linux') Required before definitions. Definitions tied to OSTYPE. define('VARIABLE','VALUE') Change a setting in sendmail. See list undefine(`UUCP_RELAY') Remove UUCP email processing capability undefine(`BITNET_RELAY') Remove BITNET addressed email processing FEATURE() See list of features FEATURE(redirect) Reject redirected email addressed to user@domain.com.REDIRECT Message returned to announce that one should send email to address defined by alias. FEATURE(always_add_domain) Append fully qualified domain name of host to user name. FEATURE(use_cw_file) File /etc/sendmail.cw defines alternate names of host. MAILER() See list of Mailers MAILER(procmail) Defines procmail as the local mail program on server. MAILER(smtp) Remote mail program. Работа с maildir Для работы с maildir необходим сортировщик почты, например, procmail. Редактируем файл /etc/procmailrc:ORGMAIL=$HOME/Maildir/ DEFAULT=$HOME/Maildir/
Теперь почта будет раскладываться по домашним директориям пользователей в директорию Maildir. Для конвертации почты из mbox в maildir, существует специальный порт mb2md:./mb2md.pl -s /var/mail/username -d /home/username/Maildir
Не забудьте после ковертации проверить права.Тестирование работы sendmail
: - Команда /usr/sbin/sendmail -bv -v -oL10 mailbox@example.com - покажет куда и каким боразом пойдет письмо
- /usr/sbin/sendmail -v mailbox@example.com - покажет процесс доставки
- Можно просмотреть процесс обмена:
#!/bin/sh host=localhost port=25 echo open $host $port sleep 2 echo ehlo localhost sleep 2 echo mail from:no-reply@example.com sleep 2 echo rcpt to:user@example.com sleep 2 echo data sleep 2 echo "subject:Test message" sleep 2 echo "from:frommail" sleep 1 echo "to:tomail" sleep 1 echo " " echo "This is a test message." echo " " echo "." sleep 2 echo quit
Скрипт запускается smtp-test.sh | telnet. Можно будет интерактивно наблюдать процесс отправки, иногда бывает очень полезно, а писать все это вручную лениво.Обработка логов
: bounce_notice_recipient = someone@nowhere.com error_notice_recipient = someone@nowhere.com virtuable someone: /dev/nullДублирование сообщений об ошибках в ящик
define(`confCOPY_ERRORS_TO', `errorman')dnlКому писал пользователь
#!/bin/sh PATH="/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin/:/usr/local/sbin" for DB in $DBS do cat /var/log/maillog \ grep "$DB to=<" \ awk '{print $7}' \ sed 's/,//g' \ sed 's/to=//g' done
С помощью такого несложного скрипта, можно вывести список адресатов кому отправлялась почта с адреса user@example.com.Оптимизация очереди
: Разобъем очередь на 8 потоков, которые можно разместить на 8ми разных дисках: - mkdir /var/spool/mqueue/q{1,2,3,4,5,6,7,8}
- В конфиг define(`QUEUE_DIR', `/var/spool/mqueue/q*')dnl
- Собираем конфиг m4 sendmail.mc > /etc/mail/sendmail.cf
- Не забудьте выставить права на директории chown -R smmta:smmsp /var/spool/mqueue/q*
Просмотр статистики отдельно взятой очереди:
- mailq /var/spool/mqueue/q6
-
Замена очереди
Если очередь по какой-то причине невозможно отправить или она уходит очень медленно, то можно её перенести в отдельную директорию и отправить позже:
cd /usr/spool mv mqueue omqueue; mkdir mqueue; chmod 700 mqueue /usr/lib/sendmail -oQ/usr/spool/omqueue -q -v
Чистка очереди
- Ручная чистка: удалить все из /var/spool/mail/*.* и /var/mqueue/*.*
- sendmail -v -q заставить отправить все письма в очереди.
- sendmail -qS -v test.com удалит все письма для отправляющего домена.
- sendmail -qR -v hotmail.com удалит все письма для получающего домена.
- sendmail -v -qI {ID} удаляяет письма по ид
-
Можно несколько автоматизировать:
#!/bin/sh for QF in `ls qf*` do blacklisted=`grep "could not send" $QF` if [ "$blacklisted" = "" ] then # trying to resend GOOD letter: echo `sendmail -v -qI$QF -d11` else # permanently deleting BAD letter: body=`echo $QF | sed 's/qf/df/'` rm $body rm $QF fi done "could not send" - change to any "unwanted text in e-mail".
df_LETTER_ID - тело письма, а qf_LETTER_ID - заголовки письма.
При запуске sendmail может возникать ошибка:Warning: Option: AuthMechanisms requires SASL support (-DSASL)
При этом sendmail устанолен из исходных текстов, в которых все верно. Посмотрите содержимое файла /etc/mail/mailer.conf:#sendmail /usr/libexec/sendmail/sendmail #send-mail /usr/libexec/sendmail/sendmail #mailq /usr/libexec/sendmail/sendmail #newaliases /usr/libexec/sendmail/sendmail #hoststat /usr/libexec/sendmail/sendmail #purgestat /usr/libexec/sendmail/sendmail sendmail /usr/local/sbin/sendmail send-mail /usr/local/sbin/sendmail mailq /usr/local/sbin/sendmail newaliases /usr/local/sbin/sendmail hoststat /usr/local/sbin/sendmail purgestat /usr/local/sbin/sendmail
Как видно sendmail был установлен, а система использовала старый.С помощью описанных действий вы можете сделать свой собственный МТА, который сможет достаточно качественно обслуживать ваших пользователей. Это далеко не все возможности sendmail, я постарался описать самые начальные мероприятия, которые необходимо предпринять чтобы организовать отправку и приём почтовых сообщений. Путем организации дополнительных серверов fallback и spillover, вы сможете ускорить работу своего МТА и обеспечить надежность этой службе. Дополнительные опции и их значения смотрите на оффициальном сайте программы.
Комментарии (0)
Добавление комментариев закрыто.