Как использовать 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