Mail notifications by GMail from Debian

Описание настройки Debian Exim4 для рассылки почты через GMail apps for domain для получения уведомлений на почту из cron и скриптов.

По умолчанию в Debian Squeeze установлен MTA Exim4. Настройка осуществляется командой
dpkg-reconfigure exim4-config
выбираем отправку почты наружу, и отключение локальной почты
General type of mail configuration: mail sent by smarthost; no local mail
вводим доменное имя
System mail name: domain.ru
оставляем адреса по которым необходимо слушать только локальные. Т.к. почтовый сервер будет использоваться только для писем с локальной машины.
IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 ; ::1
убеждаемся что локальный домен не совпадает с доменом ваших почтовых адресов
Other destinations for which mail is accepted: debian.domain.ru
Видимое имя домена тоже не трогаем, чтобы письмо с сервера содержали имя сервера.
Visible domain name for local users: debian.domain.ru
адрес червера, на который пересылать почту
IP address or host name of the outgoing smarthost: smtp.gmail.com::587
т.к. у нас dns всегда доступен, то не урезать dns-запросы
keep number of DNS-queries minimal: No
Не сохранять конфиг в мелкие файлы, а оставить одним файлом
Split configuration into small files? No
Запускаем
nano /etc/exim4/passwd.client
и вводим учетную запись GMail от имени которой будет отправляться почта.
*.gmail.com:[email protected]:y0uRpaSsw0RD
убеждаемся в том, что права на файл только у root и exim

ls -l /etc/exim4/passwd.client
-rw-r----- 1 root Debian-exim 239 Sep 24 21:17 /etc/exim4/passwd.client

если не так, то выполняем

chown root:Debian-exim /etc/exim4/passwd.client
chmod 640 /etc/exim4/passwd.client

перечитываем изменения в конфиге update-exim4.conf, проверяем отправку почты, делаем вызов sendmail с полным debug

sendmail -d [email protected]
test
.

вводим текст письма, который заканчивается точкой в начале пустой строки. Наше письмо не отправилось:

LOG: MAIN
  ** [email protected] R=smarthost T=remote_smtp_smarthost: SMTP error from remote mail server after MAIL FROM:<>; SIZE=2402: host gmail-smtp-msa.l.google.com [74.125.43.108]: 530-5.5.1 Authentication Required. Learn more at\n530 5.5.1 http://mail.google.com/support/bin/answer.py?answer=14257

Из-за того что при отправке наш адрес smarthost был зарезолвлен в IP, а потом IP через reverse dns lookup в имя хоста gmail-smtp-msa.l.google.com Это имя хоста искалось в /etc/exim4/passwd.client для получения строки авторизации

file lookup required for gmail-smtp-msa.l.google.com
  in /etc/exim4/passwd.client
gmail-smtp-msa.l.google.com in "*.gmail.com"? no (end of list)
lookup failed

открываем /etc/exim4/passwd.client и исправляем/добавляем строку авторизации на
*.google.com:[email protected]:y0uRpaSsw0RD
не забываем сделать
update-exim4.conf
и пробуем отправить почту еще раз

root@debian:/home/sepa# sendmail [email protected]
test2
.
root@debian:/home/sepa# tail /var/log/exim4/mainlog
2011-09-24 21:40:35 1R7WCS-0000sV-Iy Completed
2011-09-24 21:40:36 1R7WDL-0000sg-B6 ** [email protected] R=smarthost T=remote_smtp_smarthost: SMTP error from remote mail server after MAIL FROM:<>; SIZE=2402: host gmail-smtp-msa.l.google.com [74.125.43.108]: 530-5.5.1 Authentication Required. Learn more at\n530 5.5.1 http://mail.google.com/support/bin/answer.py?answer=14257 z7sm14961556bkt.5
2011-09-24 21:40:36 1R7WDL-0000sg-B6 Frozen (delivery error message)
2011-09-24 21:44:15 Start queue run: pid=3393
2011-09-24 21:44:15 1R7WDL-0000sg-B6 Message is frozen
2011-09-24 21:44:15 1R7W1G-0000rd-Rs Message is frozen
2011-09-24 21:44:15 End queue run: pid=3393
2011-09-24 21:54:40 1R7WQv-0000xE-0z <= [email protected] U=root P=local S=296
2011-09-24 21:54:44 1R7WQv-0000xE-0z => [email protected] R=smarthost T=remote_smtp_smarthost H=gmail-smtp-msa.l.google.com [74.125.43.109] X=TLS1.0:RSA_ARCFOUR_SHA1:16 DN="C=US,ST=California,L=Mountain View,O=Google Inc,CN=smtp.gmail.com"
2011-09-24 21:54:44 1R7WQv-0000xE-0z Completed

На этот раз письмо отправлено и получено :)

Но исходящий адрес, какой бы вы не указывали, будет заменен гуглом на тот, под логином которого было отправлено письмо. Для целей нотификации это не имеет значения. Для разных служб можно указывать разный FromName.
Теперь можно открывать
crontab -e
и добавлять строку в начало
[email protected]
Для получения ошибок в заданиях планировщика, и использовать sendmail/mail() в скриптах

Related content: