Как отправлять почту через внешний smtp

По умолчанию, при отправке почты через sendmail или функцию mail() в пхп, письма отправляются через локальный технический почтовый сервер. Иногда подобные письма могут не приниматься (особенно сервисами вроде gmail/mail.ru). Почти всегда эти письма будут попадать в спам, даже если они будут приняты почтовым сервером получателя. Для решения этих проблем можно настроить отправку почты через внешний почтовый сервер по smtp с авторизацией. Для этого необходимо создать свой конфиг для отправки почты через msmtp.

Это можно сделать в контрольной панели в меню Настройки, или можно создать в корне аккаунта файл с именем .msmtprc.force (обратите внимание, имя файла начинается с точки) с валидным для msmtp конфигом. После этого необходимо в контрольной панели в меню Настройки нажать на ссылку “Обновить конфиги”.

Пример файла для GMail:

defaults
logfile ~/.msmtp.log

account local
host smtp.gmail.com
port 587
from ваш_емейл@gmail.com
auth on
user ваш_емейл@gmail.com
password ваш_пароль
tls on
tls_starttls on
tls_certcheck off
keepbcc on

account default : local

Для отправки почты через gmail необходимо так же включить доступ для непроверенных приложений.

Так же может потребоваться разрешить вход с помощью нового приложения.

Пример файла для Yandex:

defaults
logfile ~/.msmtp.log

account local
host smtp.yandex.ru
port 587
auth on
keepbcc on
from ваш@емейл
user ваш@емейл
password ваш_пароль
tls on
tls_starttls on
tls_certcheck off

account default : local

Пример файла для Mail.ru:

defaults
logfile ~/.msmtp.log

account local
host smtp.mail.ru
port 587
auth on
keepbcc on
from ваш@емейл
user ваш@емейл
password ваш_пароль
tls on
tls_starttls on
tls_certcheck off

account default : local

Пример файла для отправки через наши почтовые сервера (mx.dobrohost.ru):

defaults
logfile ~/.msmtp.log

account local
host mx.dobrohost.ru
auth on
keepbcc on
from ваш@емейл
user ваш@емейл
password ваш_пароль

account default : local

Как проверить, что всё работает?

После применения нового конфига, для проверки корректности настройки, можно выполнить в шелле команду:

php -r "mail('ваш@емейл', 'Test', 'Test');"

Для проверки из сайта, в командную строку можно ввести код:

if (mail("ваш@емейл","test subject", "test body","From: ваш@емейл"))
echo "Сообщение передано функции mail, проверьте почту в ящике.";
else
echo "Функция mail не работает, свяжитесь с администрацией хостинга.";

Вопросы? Что-то не так?

В корне аккаунта находятся файлы .msmtp.log и phpmail.log. Если что-то с почтой не работает - можно посмотреть в конце этих файлов - там указана судьба каждого письма и описаны все ошибки.

Обратите внимание, .msmtp.log начинается с точки, если вы смотрите файлы по фтп или в шелле в mc - должен быть включен показ скрытых файлов.

После некоторого обновления контрольной панели эти файлы перенесены в ~/logs/ и теперь называются msmtp.log и phpmail.log. Если вы не видите их в корне аккаунта, значит они в каталоге logs.

Пожалуйста проконсультируйтесь со службой поддержки, если у вас будут вопросы по настройке отправки почты.

Тэги: mail