It-e.RU
Цифровой двигатель вашего бизнеса.

Настройка MTA Sendmail

Настройка MTA Sendmail

Настройка 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')dnl
        MASQUERADE_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)







Разрешённые теги: <b><i><br>Добавить новый комментарий: