Настройка SMTP на сайте – Раздел помощи – SpaceWeb

Настройки smtp популярных почтовых систем:

Для использования почтового ящика, который создан на домене, необходимо изменить MX-сервера в записях DNS, на записи выбранной почтовой системы.

Что такое dmarc и с чем его едят ¶

DMARC — это набор правил и протоколов для авторизации почты. Если перевести на общечеловеческий, то
это будет означать “делай вот так и письма не будут сразу падать в спам”.

Дело в том, что протоколы электронной почты разрабатывались в те славные времена, когда люди доверяли друг другу. И если
на сервер приходило письмо, то оно сразу падало в ящик получателя. Сам протокол отправки писем не предполагает авторизацию
сервера, который отправляет письмо, а это значит, что любое устройство в сети Интернет может слать письма от кого угодно
и куда угодно. Да-да, именно от кого угодно и куда угодно!

DMARC позволяет:

  1. Проверять сервер, чтобы ему было дозволено отправлять письма с определённого домена (SPF-запись).
  2. Проверять письмо, что оно пришло именно то, какое было отправлено (цифровая подпись DKIM).
  3. Получать отчёты о проблемах доставки (DMARC-запись).

То есть DMARC не решает проблемы спама на 100%, но позволяет понимать, что письмо было отправлено и доставлено с добросовестного
сервера, а не с кофеварки бабы Маши. Если не выполнять требования DMARC, то вероятность того, что ваше письмо отправится
в спам, будет примерно 100%.

[Наверх]

Bitrix

Для отправки писем с сайта необходимо установить дополнительные плагины. Найти их возможно в каталоге решений. В каталоге присутствуют как платные, так и бесплатные модули, например данный плагин. Описание функционала, инструкции по установке, а также отзывы других пользователей доступны на странице конкретного модуля.

Имена полей в процессе настройки могут отличаться, но основные параметры, которые вам нужно использовать, следующие:

Похожее:  ООО "Солид-Инвест", Москва (ИНН 7703474864, ОГРН 1197746276518)

После сохранения изменений, произведите тестовую отправку письма.

Instant cms

В административной панели сайта перейдите в раздел “Настройки” и далее на вкладку “Почта”. В пункте “Почтовый транспорт” выберите “SMTP” и укажите следующие параметры:

После сохранения настроек произведите тестовую отправку по кнопке “Проверить настройки почты” слева вверху, чтобы убедиться, что все работает корректно.

Joomla!

В административной панели Joomla, перейти в меню “Система”, далее “Общие настройки” и во вкладке “Сервер” найдите блок “Настройка почты”:

После сохранения изменений, произведите тестовую отправку письма.

Modx revolution

Эта CMS имеет необходимые внутренние инструменты. В административной панели наведите курсор на значок шестеренки справа вверху и откройте раздел “Системные настройки”. В поле “Фильтр по разделу” выберите “Почта”. И укажите следующие параметры:

После сохранения изменений, произведите тестовую отправку письма.

Netcat

В административной панели перейдите в раздел “Настройки” – “Настройки системы”. В блоке “Вид транспорта” выберите “Использовать SMTP” и укажите следующие параметры:

После сохранения изменений, произведите тестовую отправку письма.

Opencart

В административной панели перейдите в раздел “Система” – “Настройки”. Нажмите на кнопку “Редактировать” у магазина и откройте вкладку “Почта”. В пункте “Почтовый протокол” выберите “SMTP” и укажите следующие параметры:

Prestashop

В административной в блоке “Настроить” выберите “Расширенные параметры” – “E-mail”. Отметьте пункт “Задать свои параметры для SMTP сервера” и укажите следующие значения:

В блоке “Проверка конфигурации электронной почты” можно произвести тестовую отправку, для проверки корректности настроек.

Ptr-запись ¶

Помимо DMARC существует ещё один способ проверить, что сервер, который отправляет письмо, это настоящий сервер, а не
кофеварка. Надо всего лишь получить его PTR-запись по IP-адресу:

Smtp с авторизацией по протоколу ssl. яндекс

При работе с почтальонами Яндекс ни чего не изменилось, но, при обращении к классу, требуется указывать ссылку на хост, работающий через SSL. Так же изменился номер порта: раньше был 25, теперь используется 465. Код отправки выглядит вот так:

require_once «SendMailSmtpClass.php»; // подключение класса

Безопасность ¶

Пока POSTFIX работает на 127.0.0.1, можно особо не переживать, что вас через него взломают или как-то навредят.
Но как только вы измените внутренний адрес на внешний, ваш сервер может стать источником рассылки спама и целью для
хакерских атак. На мой взгляд, самая безопасная схема работы — когда сервер только отправляет письма, а принимает и
обрабатывает их кто-то другой.

Как только POSTFIX будет настроен и сможет отправлять письма, то заработает и функция mail() в PHP. Это значит, что
вы должны быть передельно осторожны с выбором программ, которые работают на сервере. Крайне не рекомендуется настраивать
POSTFIX на одном сервере с WordPress.

Большинство атак на сайты заключаются в том, чтобы заразить сайт вирусом и рассылать
спам. Сам по себе WordPress не является чем-то опасным, угрозу представляют его плагины. Некоторые из них изначально
могут содержать вирусы, а некоторые имеют дыры и легко взламываются.

Следите за тем, куда и когда отправляются письма с вашего сервера (на основании /var/log/mail.log). Попасть в чёрные
списки спамеров очень легко, а вот восстановить репутацию домена и IP-адреса в разы сложнее.

[Наверх]

Генерация приватного и публичного ключей

Если у вас Linux-хостинг и есть доступ в Shell, то сгенерировать файлы ключей проще простого, нужно выполнить всего 2 команды с обычными правами своего пользователя:

openssl genrsa -out test-private.pem 1024
openssl rsa -in test-private.pem -out test-public.pem -pubout

Соответственно, test-private.pem и test-public.pem – это приватный и публичный ключи. Сохранить их нужно в папке, которая будет не доступна посетителям сайта или кому-то еще кроме вас.

Если нет возможности выполнить команды в shell, тогда чтобы сгенерировать приватный (private) и публичный (public) ключи и сохранить их в файлы, можно воспользоваться следующим кодом:

Извлечение писем через протокол pop3

Библиотека PHPMailer поддерживает отправку писем по методу аутентификации POP перед SMTP. Иначе говоря, вы сможете пройти аутентификацию через POP и отправлять почту через SMTP. К сожалению, в PHPMailer реализована только возможность отправки электронных писем, поэтому получать почту по протоколу POP3 с использованием библиотеки не получится.

Использование протокола smtp

Для отправки электронных писем можно использовать почтовый сервер другого хоста, но сперва необходимо пройти аутентификацию. То есть для отправки писем через почтовый сервер Gmail необходимо иметь учётную запись в этом сервисе.

SMTP – протокол запроса на отправку электронного письма, используемый почтовыми клиентами. После того, как почтовый сервер проверит электронное письмо, он отправит его на указанный почтовый сервер.

Ниже приведен пример отправки письма через почтовый сервер Gmail с клиентского домена. Поскольку мы используем SMTP-протокол, локальный почтовый сервер не требуется:

require_once “vendor/autoload.php”;

$mail = new PHPMailer(true);

Настраиваем spf ¶

Необходимо перейти в панель управления доменом, с которого будет отправляться почта.

Если домен уже привязан к какой-либо почте

Находим в настройках домена TXT-запись, которая начинается с v=spf1 и добавляем в середину информацию о дополнительном
сервере, например так:

v=spf1 a:ВАШ_ХОСТ redirect=_spf.yandex.net

Запись a:ВАШ_ХОСТ означает, что в результирующий список разрешённых адресов нужно добавить IP-адреса, которые указаны
в A-записях домена ВАШ_ХОСТ. Запись redirect=_spf.yandex.net и другие подобные оставляйте как есть, они нужны для
работы других служб.

Если домен не привязан к почте

Добавляем новую TXT-запись к самому домену (иногда нужно указать @ в качестве имени хоста) следующего содержания:

v=spf1 a:ВАШ_ХОСТ -all

Такая запись означает “доверять почте с сервера ВАШ_ХОСТ и не доверять остальным”.

После внесения изменений

Выполните следующую команду, чтобы проверить настройки домена:

Настройка smtp на примере популярных cms:

Рассмотрим настройку SMTP на примере популярных CMS, в настройках мы будем использовать реквизиты нашей почтовой системы:

Настройка подписи dkim в phpmailer и отправка письма

Теперь осталось лишь сделать несколько настроек PHPMailer перед отправкой письма и оно будет подписано. Думаю, на приведенном примере будет всё понятно:

Отображение сообщений об ошибках на требуемом языке

Свойство $ mail-> ErrorInfo отображает сведения о возникающих ошибках на 43 различных языках. Для этого нужно скопировать каталог с языками из исходного кода библиотеки PHPMailer в каталог проекта. Например, чтобы сообщения об ошибках отображались на русском языке, нужно установить соответствующий язык объекта PHPMailer с помощью метода setLanguage() с аргументом “ru” как показано ниже:

$mail->setLanguage(“ru”);

В папку language также можно добавить любой другой язык из 43 доступных.

Отправка писем через smtp с помощью phpmailer на примере yandex и google

Можно так же отправить письмо через другой почтовик, например, через Яндекс. Код будет выглядеть примерно так:

Отправка писем через функцию mail() с помощью phpmailer

Если вы хотите отправлять письма со своего хостинга через свой почтовый сервер, то всё довольно просто и будет выглядеть примерно так:

Отправка письма с вложением с помощью phpmailer

Здесь всё довольно просто, нужно лишь использовать метод addAttachment. Приведу пример, заодно продемонстрировав еще несколько дополнительных возможностей:

Отправка письма с вложениями

В приведённом ниже коде показано, как отправить письмо с вложениями с помощью PHPMailer:

require_once “vendor/autoload.php”;

$mail = new PHPMailer;

Отправка подписанного и зашифрованного письма через phpmailer

По-умолчанию, PHPMailer шифрует все отправляемые письма. Отключить шифрование письма можно только при отправке писем через SMTP использовав код:

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;

Чтобы подписать письмо подписью DKIM, необходимо выполнить несколько действий:

Теперь опишу каждый шаг немного подробнее.

Отправка электронных писем с локального сервера с помощью phpmailer

Ниже представлен простой код для отправки электронного письма с локального сервера через библиотеку PHPMailer:

require_once “vendor/autoload.php”;

//PHPMailer Object“$mail = new PHPMailer(true); //Argument true in constructor enables exceptions`

Поднимаем postfix ¶

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

Для удобства сделаем алиасы для замены доменов из примеров на ваши значения:

Программная отправка email, используя различные сервисы

Очень часто приходится сталкиваться с отправкой электронных писем из программного кода. За примерами далеко ходить не нужно.

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

Первое, что не стоит делать по этим примерам – это использовать System.Web.Mail, который уже давно устарел, а начиная с Visual Studio 2022 библиотеку System.Web даже и не добавить, не зная полного пути к соответствующей DLL.
Вместо него предлагается использовать библиотеку System.Net.

using System.Net;
using System.Net.Mail;

Итак, самое простое, оно же самое важное и часто использующееся — это отправка письма со своего почтового сервера, на котором настроен SMTP-клиент. Как вы понимаете, сервер может быть как и тот, на котором работает приложение, так и удалённый, на котором у вас есть права отправлять письма без дополнительной авторизации.

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

using (MailMessage mm = new MailMessage("Name <[email protected]>", "[email protected]")){
    mm.Subject = "Mail Subject";
    mm.Body = "Mail Body";
    mm.IsBodyHtml = false;
    using (SmtpClient sc = new SmtpClient("127.0.0.1")){//Здесь должен быть адрес почтового сервера и порт, если требуется
        sc.Send(mm);
    }
}

С использованием почтовых служб, таких как Gmail, Yandex, Mail.ru и т.д. всё то же самое, только добавляются параметры с авторизацией.

Настройка SMTP на сайте - Раздел помощи - SpaceWeb
SMTP-сервер: smtp.gmail.com
Порт: 587

using (MailMessage mm = new MailMessage("Name <[email protected]>", "[email protected]")){
    mm.Subject = "Mail Subject";
    mm.Body = "Mail Body";
    mm.IsBodyHtml = false;
    using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587)){
        sc.EnableSsl = true;
        sc.DeliveryMethod = SmtpDeliveryMethod.Network;
        sc.UseDefaultCredentials = false;
        sc.Credentials = new NetworkCredential("[email protected]", "GmailPassword");
        sc.Send(mm);
    }
}

Настройка SMTP на сайте - Раздел помощи - SpaceWeb
SMTP-сервер: smtp.yandex.ru
Порт: 25

using (MailMessage mm = new MailMessage("Name <[email protected]>", "[email protected]")){
    mm.Subject = "Mail Subject";
    mm.Body = "Mail Body";
    mm.IsBodyHtml = false;
    using (SmtpClient sc = new SmtpClient("smtp.yandex.ru", 25)){
        sc.EnableSsl = true;
        sc.DeliveryMethod = SmtpDeliveryMethod.Network;
        sc.UseDefaultCredentials = false;
        sc.Credentials = new NetworkCredential("[email protected]", "YandexPassword");
        sc.Send(mm);
    }
}

Настройка SMTP на сайте - Раздел помощи - SpaceWeb
SMTP-сервер: smtp.mail.ru
Порт: 25

using (MailMessage mm = new MailMessage("Name <[email protected]>", "[email protected]")){
    mm.Subject = "Mail Subject";
    mm.Body = "Mail Body";
    mm.IsBodyHtml = false;
    using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25)){
        sc.EnableSsl = true;
        sc.DeliveryMethod = SmtpDeliveryMethod.Network;
        sc.UseDefaultCredentials = false;
        sc.Credentials = new NetworkCredential("[email protected]", "MailRuPassword");
        sc.Send(mm);
    }
}

Если у вас почтовый ящик на сервисе mail.ru заканчивается на inbox.ru, list.ru или bk.ru, то соответственно меняется и адрес SMTP-сервера (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru).

Как вы видите, для того, чтобы использовать любой другой почтовый сервис в ваших программах, необходимо только выяснить адрес SMTP-сервера и порт, а также правила авторизации.

Необходимо также помнить, что практически все сторонние почтовые сервисы накладывают лимиты на количество отправленных писем в период времени.

Тестируем отправку ¶

Проверяем запущенные сервисы:

netstat -lp4n | grep -E '(:25|:10021)'

Должно быть две записи:

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      11201/master        
tcp        0      0 127.0.0.1:10021         0.0.0.0:*               LISTEN      12893/opendkim

Если что-то не запустилось, смотрите /var/log/syslog на предмет ошибок.

Теперь отправляем тестовое письмо:

Установка библиотеки phpmailer

Для установки PHPMailer можно использовать менеджер пакетов (композер), выполнив следующую команду:

composer require phpmailer/phpmailer

Устранение проблем в коде

Для отладки кода был использован класс Exception библиотеки PHPMailer, который способен отследить все возможные ошибки. В конструктор объекта PHPMailer был передан аргумент true, который указывает на необходимость отображения полной информации об исключениях.

В зависимости от типа системы, наиболее распространенной ошибкой при использовании встроенной функции mail() в фоновом режиме является следующая:

Mailer Error: Could not instantiate mail function.

Если нужно получить больше сведений о возникшей ошибке, можно добавить следующий код в блок catch{}:

print_r(error_get_last());

Как правило, ошибки использования функции mail() связаны с тем, что почтовый сервер не был сконфигурирован. В этом случае функция error_get_last вернёт следующее:

Array (⠀⠀⠀⠀[type] => 2⠀⠀⠀⠀[message] => mail(): Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set()⠀⠀⠀⠀[file] => OUR_PATH vendorphpmailerphpmailersrcPHPMailer.php⠀⠀⠀⠀[line] => 863`)

Чтобы избежать этой весьма распространённой проблемы, рекомендуется использовать протокол SMTP.

Является ли phpmailer альтернативой встроенной функции mail()?

Функционала mail() достаточно для выполнения большинства стандартных задач, связанных с отправкой электронных писем, но зачастую она не обеспечивает требуемую гибкость.

Если PHPMailer поддерживает ООП, то функция mail() уже не применима при объектно-ориентированном подходе в программировании. Также PHP-разработчики не любят использовать строки $headers при отправке писем с помощью функции mail(), поскольку при этом приходится экранировать многие символы.

Для работы mail() требуется сконфигурированный локальный сервер, в то время как PHPMailer поддерживает протокол SMTP, который могут использовать аутентифицированные пользователи.

Рассмотрим ещё несколько преимуществ использования PHPMailer:

  • отображение сообщений об ошибках отправки писем более чем на 40 различных языках;
  • наличие встроенной поддержки аутентификации через SSL и TSL;
  • возможность отправки обычной текстовой копии письма клиентам, не поддерживающим письма формата HTML;
  • активное сообщество разработчиков, обеспечивающих безопасность библиотеки и выпуск обновлений.

К слову, PHPMailer используют многие CMS, созданные на языке PHP: например, WordPress, Joomla! и Drupal.

Заключение

Если вы являетесь PHP-разработчиком, вы будете часто сталкиваться с необходимостью программной отправки электронных писем. Конечно, можно использовать сторонние сервисы (Mandrill или SendGrid) или написать свою собственную библиотеку, но лучшим инструментом для решения этой задачи пока по-прежнему остаётся PHPMailer.

Подключаем opendkim ¶

Устанавливаем OpenDKIM:

apt install opendkim opendkim-tools net-tools

Создаём конфиг:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *