Настройка sendmail на localhost под Ubuntu 13.04
Руководство по установке и настройке одного из старейших 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 name, sendmail
долго стартует и медленно отправляет почту. Возможно хост 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
:
- Проверьте ваш IP'шник в блек-листах. Проверить бан IP можно тут smart-ip.net, мой IP попал в базу spamhaus'а.
- Проверьте не блокирует ли провайдер исходящие пакеты на 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 '{}'"
P.S. Если вы хотите изучить консоль Linux на достаточно хорошем уровне - рекомендую к прочтению свежую книгу Дениса Колисниченко «Командная строка Linux и автоматизация рутинных задач».
#sendmail #LAMP #MTA #mail server