Настройка sendmail на localhost под Ubuntu 13.04

Категория: Linux

Руководство по установке и настройке одного из старейших MTA (Mail Transfer Agent), программа для отправки электронной почты - sendmail, который доступен для установки на любой операционной системе. Во многих ОСях  sendmail  установлен по умолчанию и менять этот стандартный MTA на другой особой необходимости нет. При этом, тот же PHP по дефолту настроен на работу именно с этим MTA. Если настройка sendmail затягивается - ставьте postfix (Настройка postfix на localhost под Ubuntu 13.04), не стоит терять много времени.

Подготовка

Проверьте установлен ли у вас sendmail, а не exim4 или другой MTA:

ls -la `which sendmail`
# lrwxrwxrwx 1 root root 26 2011-01-17 19:58 /usr/sbin/sendmail -> /etc/alternatives/sendmail

Установка

sudo apt-get install sendmail sasl2-bin

Настройка /etc/hosts

127.0.0.1	localhost localhost.localdomain e5530
Примечание

Необходимо указать ваш основной хост (имя компьютера, у меня это e5530 ) и localhost.localdomain иначе вы получите ошибку: My unqualified host name (myhostname) unknown; sleeping for retry» и «unable to qualify my own domain name (e5530) – using short namesendmail долго стартует и медленно отправляет почту. Возможно хост localhost.localdomain можно пропустить, не уверен.

После этого нужно указать имена локальных хостов, от которых sendmail будет принимать запросы на отправку email сообщений, в  файле /etc/mail/local-host-names:

localhost
e5530

Авторизация на relay сервере gmail

Правим файл /etc/mail/auth/client-info:

AuthInfo:smtp.gmail.com "U:email@gmail.com" "I:email@gmail.com" "P:YourPass" "M:PLAIN"
AuthInfo:smtp.gmail.com:465 "U:email@gmail.com" "I:email@gmail.com" "P:YourPass" "M:PLAIN"
Примечание

Вместо порта 465 можете попытаться стучать на 587 (если есть проблемы с авторизацией):

AuthInfo:smtp.gmail.com:587 "U:email@gmail.com" "I:email@gmail.com" "P:YourPass" "M:PLAIN"

Проверьте права на доступ к файлам авторизации (600) и установите нужные, если отличаются:

chmod 600 /etc/mail/auth/*

Конфиг sendmail.mc

Файл конфига /etc/mail/sendmail.mc. Сравните ваш конфиг. Должно быть как-то так.. Порядок инструкций важен!

dnl #
include(`/etc/mail/m4/dialup.m4')dnl
include(`/etc/mail/m4/provider.m4')dnl
include(`/etc/mail/tls/starttls.m4')dnl
include(`/etc/mail/sasl/sasl.m4')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
dnl #
dnl # Default Mailer setup
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
# dnl define(`confDOMAIN_NAME', `e5530')dnl

Применяем конфиг sendmail

cd /etc/mail
sudo su # просто sudo не сработает!
m4 sendmail.mc > sendmail.cf
makemap -r hash authinfo.db < auth/client-info
make
/etc/init.d/sendmail restart # Перезагрузка конфига

Проблемы и решения

Если все настроено правильно но сообщения попадают в «отложенную очередь» и не релеятся на другой SMTP:

  1. Проверьте ваш IP'шник в блек-листах. Проверить бан IP можно тут smart-ip.net, мой IP попал в базу spamhaus'а.
  2. Проверьте не блокирует ли провайдер исходящие пакеты на 25 порт. 
Проблемы с Интертелекомом!

У меня так и не получилось настроить релей сообщений на GMail через sendmail на Интертелекомовском подключении - sendmail упорно стучался на 25 порт, который закрыт провайдером. Пришлось настраивать postfix.

Настройка PHP (если необходимо)

Укажите параметры запуска sendmail в конфиге /etc/php5/apache2/php.ini (/etc/php5/cli/php.ini):

## Настройка sendmail для PHP :
sendmail_path = /usr/sbin/sendmail -t
;sendmail_path = "/usr/sbin/sendmail -t -f phpweb7@gmail.com  -i"

Проверим настройки

echo "Текст сообщения" | mail -s "Subjet" youremail@gmail.com
sendmail -t to_receiver@gmail.com -f from@gmail.com -v -i < ~/mail-body.txt

Для проверки postfix попробуйте отправить несколько сообщений из консоли. Как это делать я расписал в этой статье: «Отправка Email сообщений из консоли».

Управление sendmail

Посмотреть всю очередь сообщений:

sudo mailq

Посмотреть очередь сообщений по определенному адресу:

sudo mailq | grep 'email@gmail.com' | wc -l

Очистить всю очередь сообщений sendmail:

sudo rm -r /var/spool/mqueue-client/*

Очистить очередь сообщений sendmail по адресату:

cd /var/spool/mqueue
ls | xargs -ti sh -c "grep 'email@gmail.com' '{}' > /dev/null && rm -f '{}'"

#sendmail, #LAMP, #MTA

P.S. Если вы хотите изучить консоль Linux на достаточно хорошем уровне - рекомендую к прочтению свежую книгу Дениса Колисниченко «Командная строка Linux и автоматизация рутинных задач».


категория: Linux