24
Сен

Настройка MSMTP для отправки писем PHP mail() через сервисы Gmail и Yandex

Так вышло, что многие провайдеры и ДЦ блокируют 25й порт для отправки почты. Возможно у вас нет возможности и желания настраивать отправку почты с вашего сервера посредством exim или sendmail, на помощь приходит msmtp

Для Centos 6.5 установка выполняется так:
yum install msmtp

На Ubuntu/Debian установка при помощи apt-get:
apt-get install msmtp

Для Linux машин:
sudo pacman -S msmtp

Конфигурируем
vi ~/.msmtprc
или
nano ~/.msmtprc

Добавляем одно или все конфиги друг за другом вписывая свои настройки:

account yandex
logfile /var/log/msmtp.log
host smtp.yandex.ru
port 587
from mail@yandex.ru
keepbcc on
auth on
user mail@yandex.ru
password пароль
tls on
tls_starttls on

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

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

Перед тестированием функции, делаем тестовое письмо:
echo -e "From: putin@kremlin.ru \n\
To: obama@bdom.com \n\
Subject: Hello World \n\
\n\
This email was sent using MSMTP via hd.zp.ua." >> sample_email.txt

Теперь можно попробовать отправить письмо:
cat sample_email.txt | msmtp --debug -a gmail obama@bdom.com
Обратите внимание, что необходимо выбрать при помощи какого конфига отправлять почту -a gmail

Можно также проверить отправку почты так:
echo "hello from hd.zp.ua." | msmtp --debug -a default obama@bdom.com

cp -p ~/.msmtprc /etc/.msmtp_php
chown www-data:www-data /etc/.msmtp_php

Даём права Apache, у вас может работать от другого пользователя, например apache:apache

Редактируем php.ini:
nano /etc/php5/php.ini
или
nano /etc/php.ini

И редактируем sendmail_path =
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

и перезагружаем Apache:
service httpd restart