Содержание
Настройка отправки 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 <TAB> <правильное_имя>@<правильный_домен> # root@host.example <TAB> 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/* найдет эти записи.