Взаимодействие Yahoo или Gmail с функцией mail()
Arch Linux, Centos, Debian, Linux, PHP, RHEL, Ubuntu | Комментировать запись
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