Содержание

Настройка отправки 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/* найдет эти записи.