phpmail () через smtp

Многие сталкиваются с необходимостью отправки писем, о регистрации пользователя, Формы связи, о заказе товара и пр. Но что бы письмо дошло до назначения необходимо точно указывать от какого имени нужно отправлять письма(Apache по умолчанию отправляет от имени [email protected]) но и часто такие письма попадают в спам. Вторая проблема более банальна. Вы покупаете VPS, Но увы хостер закрыл использование 25 порта(многие так борятся с нехорошими клиентами) и если уж хостер не пошел на уступки и не открыл порт можно воспользоваться сервис pdd.yandex или google apps если хотите отправлять письма от имени вашего домена или же просто использовать их SMTP для отправки писем.
После небольшого интро можем приступить к настройке.
С нашей проблемой нам поможет утилита msmtp
для установки на Centos

1
yum install msmtp

Ubuntu/Debian:

1
apt-get install msmtp

для других дистрибутивов смотрите какой менеджер пакетов использует система
Создаем файл SMTP настроек

1
nano /etc/.msmtp

пример:

1
2
3
4
5
6
7
8
9
10
11
account <strong>yandex</strong>
logfile /var/log/yandex.log
host smtp.yandex.ru
port 587
from [email protected]
keepbcc on
auth on
user [email protected]
password pass
tls on
tls_starttls on

ну и отправим естественно в дебаге

1
echo "hello" | msmtp --debug -a <strong>yandex </strong>[email protected]

yandex — имя акаунта настройки
поправим права для апач

1
chown apache:apache /etc/.msmtp
1
chmod 600 /etc/.msmtp

ну и привяжем использование msmtp к php через глобальный параметр php.ini

1
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp -a yandex -t"

или же пропишите этот параметр в настройки виртуального хоста apache
Создадим файл для лога

1
touch /var/log/yandex.log
1
chown apache:apache /var/log/yandex.log

ну и в конце настройки reload либо restart apache
И немного результатов:
До:
До настройки MSMTP
После:
Результат настройки MSMTP