Взаимодействие Yahoo или Gmail с функцией mail()

PHP: функция mail()

Примечание: Строки, которые нужно ввести самостоятельно или отредактировать, выделены красным. Остальной код можно просто скопировать и вставить.

Функция mail() PHP использует программу, заданную в директиве sendmail_path, для отправки электронной почты. По умолчанию используется Sendmail.

Большинство дистрибутивов Linux поставляется с предварительно установленной программой Sendmail; однако эта программа требует настройки записей SPF/PTR , создания DKIM-ключей и выполнения огромного количества других задач, чтобы сообщения не попадали в спам. SMTP-клиент под названием MSMTP может быть использован для отправки электронных писем при помощи сторонних SMTP-серверов; кроме того, MSMTP можно использовать вместе с функцией mail() вместо sendmail.

Установка MSMTP

Чтобы установить MSMTP в систему Fedora, используйте yum:

yum install msmtp

В репозиториях CentOS нет RPM-пакета для MSMTP, потому в этом случае его нужно установить из исходников:

yum install make gcc pkgconfig
wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31.tar.bz2/download
tar -xvf msmtp-1.4.31.tar.bz2
cd msmtp-1.4.31
./configure
make
make install

Примечание: На момент написания статьи последним релизом MSMTP является 1.4.31. Чтобы уточнить номер последней поддерживаемой версии, посетите эту страницу.

Чтобы установить MSMTP в Ubuntu/Debian, используйте apt-get:

apt-get install msmtp

В Arch Linux запустите:

sudo pacman -S msmtp

Настройка MSMTP

Индивидуальные конфигурационные файлы хранятся в ~/.msmtprc, общесистемный конфигурационный файл – в /etc/msmtprc. Откройте конфигурационный файл текущего пользователя:

vi ~/.msmtprc

Если вы используете почтовый аккаунт Yahoo, добавьте в этот файл такие строки:

account yahoo
tls on
tls_starttls off
tls_certcheck off
auth on
host smtp.mail.yahoo.com
user user1
from user1@yahoo.com
password yourYahooPa5sw0rd

Чтобы настроить MSMTP для поддержки Gmail, добавьте такой код:

account gmail
tls on
tls_certcheck off
auth on
host smtp.gmail.com
port 587
user user1@gmail.com
from user1@gmail.com
password yourgmailPassw0rd

Этот файл может содержать данные о нескольких аккаунтах, но для этого нужно убедиться, что значение account уникально для каждого раздела. Сохраните файл, а затем используйте команду chmod, чтобы оставить права на чтение этого файла только его владельцу, поскольку данный файл содержит пароли. Это действие  обязательно, поскольку MSMTP не будет работать, если права больше чем 600.

chmod 600 ~/.msmtprc

Прежде чем внедрить эти настройки в PHP, убедитесь, что всё работает должным образом. Для этого создайте текстовый файл, содержащий простое электронное письмо:

echo -e "From: Me <me@example.com> \n\
To: You <you@domain.com> \n\
Subject: Hello World \n\
\n\
This email was sent using MSMTP via Gmail/Yahoo." >> sample_email.txt

Отправьте это письмо:

cat sample_email.txt | msmtp --debug -a gmail you@domain.com

Примечание: При необходимости замените gmail в вышеприведенной команде значением, указанным ранее в параметре account.

Параметр –debug выведет на экран множество сообщений; это необходимо для устранения неполадок на случай, если что-то пойдёт не так. Если you@domain.com получил сообщение, значит, всё работает как надо, и теперь можно скопировать этот файл в каталог /etc:

cp -p ~/.msmtprc /etc/.msmtp_php

Передайте права на него пользователю, под именем которого запущен веб-сервер (это может быть пользователь apache, www-data или nobody, в зависимости от дистрибутива):

chown www-data:www-data /etc/.msmtp_php

Настройка PHP

Откройте файл php.ini; его расположение зависит от операционной системы и типа PHP (PHP CGI, mod_php, PHP-FPM и т.д.)

vi /etc/php5/php.ini

Найдите в нём строку:

sendmail_path =

Отредактируйте её, добавив путь к msmtp:

sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"

Затем вручную создайте лог-файл и передайте права на него веб-серверу:

touch /var/log/msmtp.log
chown www-data:www-data /var/log/msmtp.log

Перезапустите веб-сервер, чтобы активировать внесённые изменения:

service httpd restart

В Arch Linux для этого используется команда systemctl:

systemctl restart httpd

Примечание: Замените httpd в зависимости от операционной системы и веб-сервера.

Если PHP запущен как отдельный процесс (как, к примеру, PHP-FPM), перезапустите его:

service php5-fpm restart

Создайте PHP-скрипт с простой функцией mail(), чтобы протестировать настройку:

<?php
if(mail("receipient@domain.com","A Subject Here","Hi there,\nThis email was sent using PHP's mail function."))
print "Email successfully sent";
else
print "An error occured";
?>

Откройте этот файл в веб-браузере:

http://www.example.com/file.php

Если письмо по какой-то причине не было отправлено, проверьте лог-файл msmtp на наличие ошибок:

tail /var/log/msmtp.log

Общие ошибки

Если файл не был отправлен при помощи PHP-скрипта, попробуйте выполнить следующие действия:

Убедитесь в том, что вы отредактировали правильный файл php.ini. Для этого можно создать файл phpinfo() и проверить раздел Loaded Configuration File.

Возможно, был указан неверный путь к msmtp или веб-сервер не имеет прав на чтение этого файла.

Чтобы убедиться, что письмо отправлено, запустите скрипт через командную строку PHP:

php /var/www/html/file.php

Tags: , , , ,

Добавить комментарий