Настройка почты, отправка через SMTP, настройка DKIM

Конфигурационный файл размещается в modules/core/config/mail.php. Стандартно используется опция default, для которой задан драйвер sendmail:

   'default' => array (
      'driver' => 'sendmail',
   ),

вместо sendmail укажите драйвер smtp.

Далее настройте секцию с параметрами драйвера smtp:

   'smtp' => array (
      'driver' => 'smtp',
      'username' => 'address@domain.com', // Логин
      'password' => 'password', // Пароль
      'host' => 'ssl://smtp.server.com', // для SSL используйте 'ssl://smtp.server.com', для TLS 'smtp.server.com'
      'port' => 465, // порт 25, для SSL порт 465, для TLS порт 587
      'timeout' => 10,
      'log' => FALSE,
       'options' => array(
            'ssl' => array(
                'verify_peer' => FALSE,
                'verify_peer_name' => FALSE,
                'allow_self_signed' => TRUE
            )
        )
   )
В качестве пароля чаще всего указывается пароль приложений, созданный в интерфейсе почтовой службы, а не пароль от самого ящика!

Мы можем подключиться к портам 465 (SMTP over SSL) или 587 (STARTTLS), если необходим TLS, то установите опцию tls в TRUE и порт в 587:

   'smtp' => array (
       'driver' => 'smtp',
       ...
       'port' => 587,
       'tls' => TRUE,
       'timeout' => 10,
       ...
    )

Если адрес электронной почты отличается от username, то используйте дополнительную опцию from с указанием адреса электронной почты:

   'smtp' => array (
      'driver' => 'smtp',
      'username' => 'username', // Логин
      'password' => 'password', // Пароль
      'from' => 'address@domain.com', // Адрес эл. почты
       'host' => 'smtp.server.com', // для SSL используйте ssl://smtp.server.com
      'port' => '25', // Порт, для SSL укажите порт 465
        'options' => array(
            'ssl' => array(
                'verify_peer' => FALSE,
                'verify_peer_name' => FALSE,
                'allow_self_signed' => TRUE
            )
        )
   )

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

Указание отдельных опций для сайтов

Возможно отдельное задание опций отправки почты для выбранных сайтов, при этом для неуказанных отдельно сайтов будут использоваться общие параметры.

    'smtp' => array (
        'driver' => 'smtp',
        // Общие настройки для всех сайтов
        'username' => 'address@domain.com', // Адрес электронной почты
        'port' => '25', // Порт, для SSL укажите порт 465
        'host' => 'smtp.server.com', // для SSL используйте ssl://smtp.server.com
        'password' => 'password', // Пароль
        // Индивидуальные настройки для сайта с ID 17
        17 => array(
            'username' => 'address2@domain2.com', // Адрес электронной почты
            'port' => '25', // Порт, для SSL укажите порт 465
            'host' => 'smtp.server.com', // для SSL используйте ssl://smtp.server.com
            'password' => 'password', // Пароль
        )
    )

Отдельное указание доступно с версии 6.5.9. Секция 'options' добавлена в версии 6.6.8. Поддержка TLS и указание timeout добавлены в версии 6.8.4.

DKIM

Для того, чтобы письма, отправляемые из системы управления, проходили проверку DKIM, необходимо соединиться с сервером по SSH и создать открытый и закрытый ключ. * доступно с версии 7.0.6

Генерация открытого и закрытого ключа

Создаем закрытый ключ, указав вместо domain.com имя домена:

openssl genrsa -out domain.com.privatekey.pem 1024

где «domain.com.privatekey.pem» — файл приватного ключа, «1024» — длина ключа.

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

Создаем открытый ключ, указав вместо domain.com имя вашего домена:

openssl rsa -in domain.com.private.pem -out domain.com.public.pem -pubout

где «domain.com.public.pem» — файл публичного ключа

Содержимое файла открытого ключа domain.com.public.pem после генерирования ключа будет следующим:

-----BEGIN PUBLIC KEY-----
ваш открытый ключ
-----END PUBLIC KEY-----

Указание открытого ключа в NS-записи домена

Через панель регистратора домена, в настройках домена создайте TXT-запись для поддомена mail._domainkey со следующим содержимым:

v=DKIM1; k=rsa; p=ваш-открытый-ключ

Ключ должен быть указан в одну строку, без BEGIN и END.

Указание ключа в настройках системы управления

В настройках драйвера или в настройках конкретного сайта укажите использование DKIM и путь к ключу, пример указания для сайта с кодом 2:

return array (
	'default' => array (
		'driver' => 'sendmail',
	),
	'sendmail' => array (
		'driver' => 'sendmail',
		2 => array(
			'dkim' => array(
				'private_key' => '/home/user4567/domain.com.private.pem',
				'selector' => 'mail',
			)
		),
	);

Кроме приведенных опций, для DKIM могут быть заданы следующие:

array(
	'hash' => 'sha256', // sha256|sha1
	'passphrase' => '',
	'selector' => 'mail',
	'domain' => NULL,
	'identity' => NULL,
	'body_canonicalization' => 'relaxed',
)

Особенности настройки почтовых серверов

Яндекс.Почта

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

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

В качестве SMTP-сервера укажите ssl://smtp.yandex.ru, порт 465, не указывать TLS.

Mail.ru

Для подключения к почтовому ящику Mail.ru из стороннего приложения не подходит обычный пароль, который используется для входа в учетную запись, создайте специальный пароль приложения. Перейдите в настройки Mail ID → «Безопасность» → «Пароли для внешних приложений», нажмите Добавить, введите название приложения, чтобы не забыть, для какой программы пароль, скопируйте сгенерированный пароль приложения.

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.

Комментарии

  • Без темы

    для в сех сайтов с учетом того что емейлы у всех сайтов разные! соответственно смтп нужно для каждого сайта отдельное

    21.05.2016 15:37:10
    ZubriDom
    ZubriDom

    Без темы

    С версии 6.5.9 данное решение будет доступно.

    23.05.2016 13:59:54
    hostcms

    Без темы

    И как именно это сделать?
    В файл /modules/core/config/mail.php в какие именно части нужно добавить настройки для конкретного id сайта?

    11.04.2022 21:13:50
    lezhenkin

    Без темы

    Выше пример с 17 сайтом:
    // Индивидуальные настройки для сайта с ID 17
    17 => array( ...

    12.04.2022 09:30:41
    hostcms

    Без темы

    Это получаются индивидуальные настройки сайта для smtp.
    А нельзя аналогичным образом указать прям индивидуальные настройки сайта? Ну, допустим, чтобы дефолтным драйвером системы был sendmail, а конкретный сайт использовал smtp

    12.04.2022 11:22:46
    lezhenkin
  • Без темы

    Если у нас на одном движке стоит несколько сайтов, то этот способ перехода на СМТП будет действовать для какого сайта?

    Как сделать СМТП для всех сайтов?

    21.05.2016 11:24:19
    ZubriDom
    ZubriDom