Поиск по сайту:

Как использовать Gmail или Yahoo с функцией PHP mail()


Что означает красный цвет

Строки, которые пользователь должен ввести или настроить, будут выделены красным цветом в этом руководстве!

Остальное в основном должно быть доступно для копирования и вставки.

О почте PHP()

Директива конфигурации PHP sendmail_path для отправки электронных писем. По умолчанию это настроено как sendmail.

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

Монтаж

Чтобы установить MSMTP в Fedora Linux, используйте 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

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

В дистрибутиве Ubuntu/Debian используйте apt-get:

apt-get install msmtp

Пользователи Arch Linux:

sudo pacman -S msmtp

Настройка 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

Для 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

Этот файл также может иметь более одной учетной записи, просто убедитесь, что значение «учетной записи» уникально для каждого раздела.

chmod 600 ~/.msmtprc

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

echo -e "From: alice@example.com \n\
To: bob@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 bob@domain.com

Замените слово «gmail» на «yahoo» или на то, что вы ввели для параметра «аккаунт». Вы увидите много сообщений из-за

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

Измените владельца на имя пользователя, под которым работает веб-сервер. Это может быть «apache», «www-data» или «nobody» в зависимости от дистрибутива Linux на вашем VPS и установленном веб-сервере:

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-скрипта, устраните неполадку следующим образом:

  • Check if you edited the correct php.ini file. This can be confirmed by creating a phpinfo(); file and checking the "Loaded Configuration File" section.
  • The path to the msmtp configuration file might be wrong or the web server doesn't have permission to read this file.
  • Check if an email is sent by running the script using command-line PHP:
    php /var/www/html/file.php