воскресенье, 11 мая 2008 г.

Настройка MTA для работы через внешний SMTP сервер

отсюда
Поскольку MTA существуют самые разные и многим нравится только какой-то определенный, я попытаюсь описать настройку нескольких популярных MTA.

1. Sendmail
Классический Sendmail многим не нравится из-за сложной настройки, но все-таки это очень мощный и достаточно распространенный MTA. Итак (все действия будут выполнятся пользователем root),

# apt-get install sendmail

Добавим несколько строк в /etc/mail/sendmail.mc для того, чтобы Sendmail отсылал почту через gmail (добавлять эти строчки нужно до параметров MAILER, иначе потом будет ошибка при сборке конфигов).

define(`SMART_HOST',`smtp.gmail.com')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`RELAY_MAILER',`esmtp')dnl
define(`RELAY_MAILER_ARGS', `TPC $h 587')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl

Теперь создадим папку /etc/mail/auth, а в ней - файл client-info, в котором будут храниться наши логин и пароль для my.name@gmail.com.

# mkdir /etc/mail/auth
# touch /etc/mail/client-info

Добавим в client-info наши параметры авторизации (my.name заменим на свой логин на gmail, а password - на пароль).

AuthInfo:smtp.gmail.com "U:root" "I:my.name" "P:password" "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:root" "I:my.name" "P:password" "M:PLAIN"

Для пущей безопасности можно сделать этот файл (да и папку тоже) доступными только для пользователя root

# chmod 600 /etc/mail/auth/client-info
# chmod 700 /etc/mail/auth

Преобразуем этот файл в нужный формат

# makemap -r hash /etc/mail/auth/client-info.db < /etc/mail/auth/client-info

Теперь выполним одно специфичное для Sendmail действие - пересборку конфигурационных файлов

# cd /etc/mail
# make

И наконец перезапускаем MTA для применения изменений

# /etc/init.d/sendmail reload

Готово. Можно отправлять почту.

2. Postfix
Postfix обладает всей мощью Sendmail, будучи полностью с ним совместимым, но при этом он гораздо проще в конфигурации. Кроме того, это мой любимый MTA, так что я не мог обойтись без описания его настройки. Итак (все действия производятся от имени root),

# apt-get install postfix

Скопируем главный настроечный файл postfix в нужное место (почему-то в Kubuntu он не устанавливается по-умолчанию)

# cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

В конец этого файла добавим несколько строк, чтобы настроить доставку почты через gmail.

relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_passwd
smtp_sasl_security_options = noanonymous

Теперь создадим указанный нами файл авторизации

# touch /etc/postfix/gmail_passwd

и добавим в него наши логин и пароль на gmail (my.name заменяем на логин, а password - на пароль).

smtp.gmail.com:587 my.name@gmail.com:password

Преобразуем этот файл в нужный формат (BDB) и для пущей безопасности защитим его от доступа простых смертных.

# postmap /etc/postfix/gmail_passwd
# chown root:postfix /etc/postfix/gmail_passwd*
# chmod 0640 /etc/postfix/gmail_passwd*

Перезапускаем Postfix для применения изменений.

# /etc/init.d/postfix restart

Настройка закончена. MTA готов к отправке почты через gmail.

3. Exim
Exim - один из самых популярных (и мощных) MTA. Именно его мне советовала Kubuntu при установке Mutt. Кроме того, exim уже упоминался в этом блоге, так что описание его настройки вполне закономерно. Итак (всё делаем с правами root),

# apt-get install exim4

Отредактируем следующие параметры в файле /etc/exim4/update-exim4.conf.conf, чтобы отправлять почту через gmail

dc_eximconfig_configtype='smarthost'
dc_smarthost='smtp.gmail.com::587'

В файл авторизации /etc/exim4/passwd.client добавим следующие строки (подставляем свои логин и пароль вместо my.name и password соответственно)

gmail-smtp.l.google.com:my.name@gmail.com:password
*.google.com:my.name@gmail.com:password
smtp.gmail.com:my.name@gmail.com:password

Выполним следующую команду для применения новых настроек

# update-exim4.conf

На этом настройка завершена. Exim будет отправлять почту через gmail.

3 комментария:

sergicus комментирует...

спасибо выручило

mnv комментирует...

Подробнее для exim:

1. Прописываем параметры аутентификации в /etc/exim4/passwd.client

smtp.gmail.com:myaccount@gmail.com:mypassword
gmail-smtp-msa.l.google.com:myaccount@gmail.com: mypassword
## Второй сервер нужен т.к. smtp.gmail.com ссылается на него

2. Запускаем в терминале
#dpkg-reconfigure exim4-config

И по шагам указываем следующую информацию
Общий тип почтовой конфигурации:
- отправка почты через smarthost; приём по SMTP или через fetchmail
Почтовое имя системы:
- Оставляем пустую строку
IP-адреса, с которых следует ожидать входящие соединения SMTP:
- 127.0.0.1
Другие места назначения, для которых должна приниматься почта:
- Оставляем пустую строку
Машины, для которых доступна релейная передача почты:
- Оставляем пустую строку
IP-адрес или имя хоста являющегося исходящим smarthost:
- smtp.gmail.com::587
Скрывать локальное почтовое имя в исходящей почте?
- Нет
Сокращать количество DNS-запросов до минимума (дозвон по требованию)?
- Нет
Метод доставки локальной почты:
- mbox формат в /var/mail/
Разделить конфигурацию на маленькие файлы?
- Да

3. Пробуем отправить почту

Если возникнут проблемы, то хорошо помогут логи в файле /var/log/exim4/mainlog. Кстати, для его мониторинга хорошо поможет пакет eximon4, в Ubuntu его можно установить через Synaptic.

Для проверки отправки письма можно вызывать скрипт на php:
$res = mail('toaddress@yandex.ru', 'Тема сообщения', 'Текст сообщения');
print_r($res);

Михаил комментирует...

Настроил через Exim.

Единственная проблема: Google, с…обака, переписывает заголовки From, Return-Path и т.п. на оригинальный адрес отправителя.

Ни переписывание хеадеров при отправке письма, ни даже параметр “-f{$from}” не помогают.

При этом Exim обрабатывает правильно:

2011-02-02 10:24:02 1PkX4M-0001Nk-FJ < = from@bk.ru U=www-data P=local S=661
2011-02-02 10:24:03 1PkX4M-0001Nk-FJ = > to@domain.ru R=smarthost T=remote_smtp_smarthost H=gmail-smtp-msa.l.google.com [209.85.225.109] X=TLS1...
2011-02-02 10:24:03 1PkX4M-0001Nk-FJ Completed

Но почта на ящик приходит не от from@bk.ru, а от того ящика gmail, на который настроен Exim (типа vasya.pupkin@gmail.com).

Даже не знаю, как с этим бороться. Кто что может посоветовать?