====== Настройка отправки Sendmail без настройки самого почтового сервера ====== Для кого нужно: виртуальный хостинг, когда вам не нужно ставить почтовый сервер для каждой виртуальной машины только ради того, чтобы настроить отправку писем. ===== Порядок действий ===== **1.** Нам не нужно запускать почтовый сервер, поэтому в rc.conf: sendmail_enable="NO" **2.** Далее создаем файл `hostname`.mc (здесь `hostname` - результат выполнения команды hostname): cd /etc/mail cp freebsd.mc `hostname`.mc **3.** Открываем `hostname`.mc, прописываем: define(`SMART_HOST', `DNS_имя_вашего_почтового_сервера') Обратите внимание, ведущий "dnl" удален (это маркер комментария). Также 'DNS_имя_вашего_почтого_сервера' - укажите имя почтового сервера, который с радостью примет почту от вашего хоста, забыв при этом про авторизацию. Замечание. У меня не всегда получалось методом выше заставить sendmail пользоваться смарт-хостом. Попробуйте поместить смарт-хост в квадратные скобки, вы тем самым скажете Sendmail не пользоваться данными mx-записей и не думая отсылать письмо смартхосту. Пример: define(`SMART_HOST', `[DNS_имя_вашего_почтового_сервера]') **4.** Далее: make make install make restart-mta **5.** Пропишем псевдонимы в файле /etc/mail/aliases: #пример: root: support@<ваш_домен> **6.** После сохранения, выполняем команду: newaliases **7.** Окончательные штрихи. Если вы хотите, чтобы почта с вашего виртуального сервера приходила в формате <правильное_имя>@<правильный_домен>, то внесите в `hostname`.mc записи: FEATURE(masquerade_envelope)dnl FEATURE(`genericstable') GENERICS_DOMAIN(`<правильный_домен>') **8.** Создайте файл /etc/mail/genericstable, внесите данные: # примеры # root <правильное_имя>@<правильный_домен> # root@host.example user@example.net **9.** Далее выполняем: makemap hash /etc/mail/genericstable < /etc/mail/genericstable **10.** Прописываем в /etc/hosts соответствие IP адреса и доменному имени вашей машины. ===== Отладка ===== 1. В /var/log/messages видим ошибку: SYSERR(root): savemail: cannot save rejected email anywhere Losing ./qfp0Q01Lip094100: savemail panic Такое случается, когда не удается отправить почту postmaster'у. В первую очередь, надо проверить, что в /etc/aliases указано, куда отправлять почту, к примеру: root: support@itcall.ru MAILER-DAEMON: postmaster postmaster: root Т.е. в нашем случае, при отправке почты на postmaster, почта будет переправлена на root, который в свою очередь перенаправит письмо на support@itcall.ru. Если у вас все в порядке с алиасами, то выполните: sendmail -bv MAILER-DAEMON sendmail -bv postmaster Попробуйте отправить тестовое письмо так: # sendmail -v postmaster@itcall.ru From: root To: root Subject: Test Test . Посмотрите, какие сообщения присутствуют в логе /var/log/maillog. 2. Нисмотря ни на что, sendmail при отправке не хочет отправлять через заданный смартхост Например, у меня была ситуация: хочу отправить почту на user@domain.ru, прописан смартхост, через который выполнять отправку, однако sendmail все равно пытается отправить через локальный смартхост 127.0.0.1. Проблема была в том, что в /etc/hosts у меня был прописан этот самый домен, в который я хотел отправить письмо. Как только я изменил домен (к примеру, у меня была запись 192.168.0.20 для domain.ru, я изменил домен на www.domain.ru) в /etc/hosts, все заработало (есстественно, после всех изменений, нужно перезапустить sendmail. Почтовый сервер sendmail считает почтовый домен локальным (то есть обрабатывает почту для данного домена) в следующих случаях, если на сервер указывают записи: — Запись A или MX в прямой зоне DNS (проверяется командой host имя.домена) — Hostname сервера — Записи в /etc/hosts — Записи в обратной зоне DNS (проверяется командой host ip-address) — Записи в /etc/mail/local-hosts-names, /etc/mail/virtusertable и непосредственно имя домена может быть определено в конфигах sendmail (hostname.mc, sendmail.mc и из него который создается sendmail.cf — команда grep -i domain /etc/mail/* найдет эти записи. {{tag>sendmail FreeBSD}}