Документация для разработчиков

Отправка через SMTP

Передача писем на отправку по протоколу SMTP. Если ваша система уже умеет отправлять почту сама, это самый короткий путь к интеграции — менять в ней ничего не придётся, достаточно прописать наши реквизиты.

Когда подходит SMTP #

SMTP-подключение выигрывает там, где письма уже отправляются: CMS, CRM, готовый почтовый модуль фреймворка. Вы меняете хост, логин и пароль — и письма начинают идти через нас.

У способа есть предел. Всё, что выходит за рамки «отправить письмо», SMTP-протокол выразить не может: подстановка значений в шаблон, вложения из библиотеки, работа с адресными базами. За этим — в транзакционное API.

На бесплатном тарифном плане доступ отключён по умолчанию. Напишите в техподдержку, и его откроют для вашего аккаунта.

Логин и пароль #

Реквизиты доступны всем клиентам, которые настроили собственный домен отправки — то есть прописали DKIM и SPF. Смотреть их в личном кабинете: Аккаунт → Мои домены.

Там же, в разделе Интеграции → Email-транспорт → SMTP доступ, можно завести несколько пар логин-пароль — по одной на систему. Так проще отозвать доступ у чего-то одного, не трогая остальные интеграции.

Реквизиты подключения #

ПараметрЗначениеОписание
host smtps.dashasender.ru Адрес сервера.
port 25, 2525 Обычное подключение с переходом на шифрование через STARTTLS. Порт 2525 берут, когда провайдер режет 25-й.
port (SSL) 465 Подключение, зашифрованное с первого байта. В настройках почтовых модулей ему обычно соответствует «SSL», а не «TLS».
security Auto, TLS Для портов 25 и 2525.
username строка Из раздела Интеграции → Email-транспорт → SMTP доступ.
password строка Оттуда же. Показывается один раз при создании.

Пример отправки #

Ниже — минимальное письмо с отключённым трекингом кликов. Логин, пароль и адрес отправителя подставьте свои.

curl --url 'smtp://smtps.dashasender.ru:2525' \
  --user 'YOUR_LOGIN:YOUR_PASSWORD' \
  --mail-from 'noreply@example.com' \
  --mail-rcpt 'ivan@example.com' \
  --upload-file - <<'EOF'
From: Магазин <noreply@example.com>
To: ivan@example.com
Subject: Заказ 128341 собран
Content-Type: text/html; charset=utf-8
DM-No-Track-Clicks: 1

<p>Ваш заказ ждёт в пункте выдачи.</p>
EOF
<?php
// composer require phpmailer/phpmailer
$mail = new PHPMailer\PHPMailer\PHPMailer(true);

$mail->isSMTP();
$mail->Host       = 'smtps.dashasender.ru';
$mail->Port       = 2525;
$mail->SMTPAuth   = true;
$mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->Username   = 'YOUR_LOGIN';
$mail->Password   = 'YOUR_PASSWORD';
$mail->CharSet    = 'UTF-8';

$mail->setFrom('noreply@example.com', 'Магазин');
$mail->addAddress('ivan@example.com');
$mail->addCustomHeader('DM-No-Track-Clicks', '1');

$mail->isHTML(true);
$mail->Subject = 'Заказ 128341 собран';
$mail->Body    = '<p>Ваш заказ ждёт в пункте выдачи.</p>';

$mail->send();
import smtplib
from email.message import EmailMessage

message = EmailMessage()
message['From'] = 'Магазин <noreply@example.com>'
message['To'] = 'ivan@example.com'
message['Subject'] = 'Заказ 128341 собран'
message['DM-No-Track-Clicks'] = '1'
message.set_content('<p>Ваш заказ ждёт в пункте выдачи.</p>', subtype='html')

with smtplib.SMTP('smtps.dashasender.ru', 2525) as smtp:
    smtp.starttls()
    smtp.login('YOUR_LOGIN', 'YOUR_PASSWORD')
    smtp.send_message(message)
// npm i nodemailer
import nodemailer from 'nodemailer';

const transport = nodemailer.createTransport({
  host: 'smtps.dashasender.ru',
  port: 2525,
  secure: false,          // STARTTLS; для порта 465 — true
  auth: { user: 'YOUR_LOGIN', pass: 'YOUR_PASSWORD' },
});

await transport.sendMail({
  from: 'Магазин <noreply@example.com>',
  to: 'ivan@example.com',
  subject: 'Заказ 128341 собран',
  html: '<p>Ваш заказ ждёт в пункте выдачи.</p>',
  headers: { 'DM-No-Track-Clicks': '1' },
});

Служебные заголовки #

Всё, что SMTP-протокол сам по себе не умеет, задаётся заголовками письма. Значение у большинства из них не важно — важно само наличие заголовка.

ЗаголовокЗначениеЧто делает
DM-Domain домен Каким доменом подписывать письмо (DKIM и SPF). Без него берётся первый по списку в разделе Аккаунт → Мои домены.
DM-Delivery-Timestamp timestamp Отложенная отправка: письмо будет доставлено в указанное время, а не сразу.
DM-Message-ID строка Ваш собственный идентификатор письма. Придёт обратно в вебхуках — по нему удобно связывать события со своей базой.
DM-Campaign-ID строка Метка для группировки писем в статистике. Буквы и цифры.
DM-No-Track-Opens любое Не отслеживать открытия этого письма.
DM-No-Track-Clicks любое Не подменять ссылки на трекинговые.
DM-Ignore-Delivery-Policy любое Игнорировать «Единую политику коммуникаций», даже если она включена для email-транспорта.

Остальные заголовки доезжают до получателя как есть. Исключение — Content-Type, MIME-Version, Message-ID и Date: их мы формируем сами.

Трекинг открытий и кликов #

По умолчанию включены оба: в письмо подставляется пиксель, а ссылки заменяются на трекинговые. Выключается это заголовками DM-No-Track-Opens и DM-No-Track-Clicks — по одному письму.

Если в вашей системе заголовки не добавить, тот же результат даёт переключатель в разделе Интеграции → Email-транспорт → SMTP доступ: он включает эти заголовки принудительно для всех писем, идущих через SMTP.

Несколько получателей #

В заголовке To можно перечислить несколько адресов через запятую. CC и BCC работают так же.

Обратный адрес #

Адрес в поле From должен быть подтверждён в разделе Доставляемость → Подтверждённые отправители. Правило то же, что и для транзакционного API: письмо с неподтверждённого адреса не уйдёт.

Вебхуки #

Отдельных вебхуков у SMTP нет — события о доставке, открытиях, кликах и возвратах приходят те же, что и у HTTP API, и настраиваются там же. Чтобы узнавать в них свои письма, отправляйте DM-Message-ID.

Вопросы #

Что-то не отправляется или ведёт себя не так, как здесь написано — пишите на support@dashamail.ru. Приложите DM-Message-ID или время отправки: так разбираться быстрее.

DashaMail хранит и защищает ваши данные на территории Российской Федерации

Подробнее...