На днях понадобилось настроить отправку писем при помощи PHP, раньше необходимости в этом не было, так что и настроено не было тоже.
Как известно, PHP-функция mail()
сама не отправляет почту, а лишь передаёт составленное письмо программе MTA (агенту передачи почты), и так как собственного SMTP-сервера у меня нет, для отправки писем я пользуюсь Gmail. В качестве MTA решил использовать стандартный sendmail.
О том, как всё это настроить и связать вместе — далее.
Для начала убедитесь, что у вас установлен именно sendmail (а не exim4 или другой MTA), сделать это можно так:
ls -la `which sendmail` lrwxrwxrwx 1 root root 26 2011-01-17 19:58 /usr/sbin/sendmail -> /etc/alternatives/sendmail |
Потому что в свежих убунтах вроде как устанавливается именно exim4. По крайней мере у меня оказался он.
Настройка sendmail
Правка /etc/mail/sendmail.mc
добавьте следующие строки в конец файла, но ДО группы опций MAILER*
:
define(`SMART_HOST',`smtp.gmail.com:465') define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl |
обратите внимание на разные кавычки вокруг значений — это не ошибка!
создайте файл /etc/mail/auth/client-info:
1 | AuthInfo:smtp.gmail.com "U:nobody" "I:USERNAME@gmail.com" "P:PASSWORD" |
Права и применение конфигов:
chmod 600 /etc/mail/auth/* sendmailconfig |
Настройка PHP
Посмотрите вывод phpinfo()
, должна быть директива
sendmail_path = /usr/sbin/sendmail -t -i
если это не так, исправьте в php.ini в секции [mail function]
, и не забудьте перезапустить Apache.
Проверка
Используйте примерно такой код:
1 2 3 | <?php mail('mailto@address.com', 'Subject', 'Text'); ?> |
Если письмо не отправилось, смотрите лог sendmail в /var/log/mail.log
P.S. Это перевод вот этого поста с дополнениями.
Также существует более свежая его версия здесь. Там добавлена конфигурация SSL-сертификатов для Gmail. Я этого делать не стал, потому что всё работает и так.
P.P.S. На самом деле работает не совсем всё, что должно: не получается писать произвольный email в заголовке письма From:
Но, скорее всего, это проблема конкретно моего сервера, если я это решу, текст будет дополнен.
Последние комментарии