Многим web-мастерам необходимо уметь настраивать почтовую службу на своем хосте. Обычно, в качестве почтовой службы используется сервер sendmail. Однако, зачастую, из всех возможностей sendmail используется только отправка почты. Если ресурсы на сервере ограничены, и не хочется выделять память для того чтобы процесс sendmail постоянно висел в системе, то в систему можно установить программу ssmtp. Программа ssmtp отправляет почту точно так же как sendmail, но при этом не висит постоянно в памяти, а автоматически запускается каждый раз, когда какой-нибудь программе необходимо отправить письмо.
В этой статье рассказывается, как настроить программу ssmtp для работы через сервера Google.
Как это работает
Исторически сложилось так, что в *NIX-мире для передачи почты первым был написан сервер sendmail. Этот сервер долгое время был стандартом де-факто. Сервер sendmail представляет из себя комбаин, который выполняет множество функций и использует для приема и передачи почты протокол SMTP.
Постепенно была сформирована концепция MTA - то есть, концепция Mail Transfer Agent. MTA - это элемент системы передачи почты, который занимается только процессом передачи почтовых сообщений. Программы, используемые для передачи почтовых сообщений, являются MTA-программами.
Помимо sendmail, в *NIX системах появились и другие MTA-программы. Например, postfix, EXIM и, что для нас важно, ssmtp. Однако исторически в системе Linux принято, что программа для передачи почтовых сообщений должна быть именно sendmail. Поэтому, когда устанавливается любая из MTA-программ, она создает файлы линков /usr/sbin/sendmail и /usr/lib/sendmail, которые указывают на нужную программу. В нашем случае, эти файлы будут указывать на программу ssmtp.
$ cd /usr/sbin
$ ls -l | grep sendmail
lrwxrwxrwx 1 root root 5 2011-04-07 03:09 sendmail -> ssmtp
Программа ssmtp на самом деле представляет из себя просто консольный SMTP-клиент, который в stdin принимает отправляемое письмо и умеет соединяться с внешним SMTP-сервером и отправлять ему почтовые сообщения. В этом смысле, ssmtp мало чем отличается от других почтовых клиентов, таких как KMail или Thunderbird.
Обратите внимание:
Для отправки писем не требуется чтобы постоянно был включен обслуживающий демон (он необходим только для приема писем). Поэтому ssmtp - это просто программа.
В Linux при отправке писем любой клиент (например, интерпретатор PHP) по-умолчанию выполняет программу /usr/sbin/sendmail, передавая через стандартный поток ввода заголовки и текст письма. В нашем случае это линк, и он указывет на программу ssmtp. Поэтому отправка почты будет совершаться через ssmtp.
Как настроить
Итак, нужно иметь почтовый ящик на GMail. Все письма, рассылаемые через ssmtp будут приходить адресату так, как будто они были отправлены с ящика Google. Предположим, что у нас есть ящик myemail@gmail.com. Будем проводить настройки с использованием этого почтового ящика.
Устанавливаем программу ssmtp. В Debian для этой цели можно использовать команду:
$ sudo apt-get install ssmtp
После устновки нужно настроить файл /etc/ssmtp/ssmtp.conf. Вот как он должен выглядеть, чтобы ssmtp работал через GMail:
root=myemail@gmail.com
mailhub=smtp.gmail.com:465
AuthUser=myemail
AuthPass=пароль_к_почтовому_ящику
rewriteDomain=gmail.com
hostname=gmail.com
FromLineOverride=YES
UseTLS=YES
Далее нужно настроить файл /etc/ssmtp/revaliases. В нем следует прописать тех пользователей, от которых возможна отправка почты. Обычно прописывается пользователь root и пользователь www-data чтобы веб-сервер имел возможность отправлять почту. Содержимое этого файла должно быть следующим:
root:myemail@gmail.com:smtp.gmail.com:465
www-data:myemail@gmail.com:smtp.gmail.com:465
На этом настройку можно считать законченой.
Для проверки следует попробовать отправить почтовое сообщение через PHP. Создаем скрипт send_test_email.php следующего содержания:
<?php
mail("anyemail@mail.ru", "Заработало!", "Это проверка \n ssmtp");
?>
Выполняем его в браузере или в консоли сервера, и на ящик anyemail@mail.ru должно прийти письмо с ящика myemail@gmail.com.
Если вы всё сделаете правильно, должно заработать с первого раза.