Создание API ключа

Создание API ключа доступно по ссылке: https://beta.rusender.ru/api.

Подробную информацию о создании API ключа можно прочитать в нашей Базе знаний.

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

Роут отправки письма (с готовым HTML)

  1. POST https://api.beta.rusender.ru/api/v1/external-mails/send

В заголовке «X-Api-Key» необходимо передать строкой ключ API для аутентификации.

Пример тела запроса

  1. {
  2. "idempotencyKey": "unique-key-string",
  3. "mail": {
  4. "to": {
  5. "email": "user@example.com",
  6. "name": "string"
  7. },
  8. "from": {
  9. "email": "user@example.com",
  10. "name": "string"
  11. },
  12. "subject": "string",
  13. "previewTitle": "string",
  14. "headers": {
  15. },
  16. "cc": "string",
  17. "bcc": "string",
  18. "html": "string",
  19. "text": "string"
  20. }
  21. }

Описание полей

  • subject* (тема) — содержит тему или заголовок письма;

  • previewTitleпрехедер письма, до 120 символов;

  • html*, text — если передать и текстовую и HTML-версию одновременно, то клиент почты получателя будет решать, какую версию отобразить пользователю в зависимости от его настроек и возможностей. Обычно почтовые клиенты отображают в формате HTML, если они поддерживают эту функцию. Наш сервис автоматически генерирует text похожий на html, если text не передан (или передана пустая строка);

  • name (to/from) — имя получателя/отправителя письма;

  • headers — системные заголовки письма (необязательно поле, для опытных пользователей) https://nodemailer.com/message/custom-headers;

  • cc и bcc — это адрес получателя копии и адрес получателя скрытой копии;

    • cc (Carbon Copy) — это поле «копия» или «отправить копию». Адресат указанный в CC получит копию сообщения, но все получатели смогут видеть, кому еще были отправлены копии сообщения;

    • bcc (Blind Carbon Copy) — это поле «скрытая копия». Это может быть полезно, если вы хотите отправить копию сообщения кому-то без раскрытия его адреса другим адресатам.

  • attachments — вложение в письмо (файл), в формате массива файлов структурой вида:

    { "название файла.расширение": "тело файла закодированное в base64"};

  • idempotencyKey (String) — ключ идемпотентности используется для предотвращения повторного выполнения одного и того же запроса.

    Отправка с использованием ключа идемпотентности

    По умолчанию, если в течение одного часа поступает запрос на отправку письма с полностью совпадающими параметрами:

    • отправитель (From);
    • получатель (To);
    • тело письма (Body).

    Такой запрос будет отклонён для предотвращения задвоения писем.

    Если требуется отправка писем с одинаковыми параметрами (например, уведомление «Ваш комментарий одобрен»), необходимо использовать кастомный ключ идемпотентности «idempotencyKey», который должен быть передан вне блока «mail» в запросе. При различающемся «idempotencyKey» письма будут считаться разными и будут успешно отправлены.

Примечания

  • Кодировку указать нельзя, всегда используется UTF-8;

  • Запрос принимает любые системные заголовки, но те которые проставляются нами — имеют приоритет, а именно: Return-Path, List-Unsubscribe, Errors-To, X-Complaints-To, Precedence, Feedback-ID, X-SenderName-MailID, X-Mailru-Msgtype, X-Postmaster-Msgtype.

Возможные ответы

Статус Описание
201

Email accepted for sending

Пример:

  1. {
  2. "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  3. }
400

Request body format is invalid

Пример:

  1. {
  2. "message": "mail.to.name must be shorter than or equal to 255 characters,mail.from.email must be an email",
  3. "statusCode": 400
  4. }

or "Attachments parse failed" or "Attachments size more than allowed" or "Attachments type forbidden"

401

Invalid api-key

Пример:

  1. {
  2. "message": "Неверный ключ API",
  3. "statusCode": 401
  4. }

Решение — замените код передачи API-ключа на:

  1. $headers = array(
  2. 'Content-Type: application/json',
  3. 'X-Api-Key: YOUR_API_KEY'
  4. );
402 Is not enough resource on user Balance
403 ExternalMailApiKey not enabled, or user domain is not verify
404 User, UserDomain or ExternalMailApiKey not found
422 Email receiver unsubscribed from this API key mails
422 Email receiver complained from this API key mails
422 Email receiver doesn't exist
422 Email receiver unavailable
503 Service temporarily unavailable

Ограничения по прикрепляемым файлам и размеру

Ограничение на размер тела запроса 5 мб
Ограничение на общий размер вложений в письме 5 мб
Ограничение на количество вложений в письме 20 штук
Ограничение на вложения в письме (тип файла) ADE, ADP, APK, APPX, APPXBUNDLE, BAT, CAB, CHM, CMD, COM, CPL, DIAGCAB, DIAGCFG, DIAGPACK, DLL, DMG, EX, EX_, EXE, HTA, IMG, INS, ISO, ISP, JAR, JNLP, JS, JSE, LIB, LNK, MDE, MSC, MSI, MSIX, MSIXBUNDLE, MSP, MST, NSH, PIF, PS1, SCR, SCT, SHB, SYS, VB, VBE, VBS, VHD, VXD, WSC, WSF, WSH, XLL.

Примеры использования API

  1. $url = 'https://api.beta.rusender.ru/api/v1/external-mails/send';
  2. $data = array(
  3. 'idempotencyKey' => 'unique-key-string',
  4. 'mail' => array(
  5. 'to' => array(
  6. 'email' => 'user@example.com',
  7. 'name' => 'string'
  8. ),
  9. 'from' => array(
  10. 'email' => 'user@example.com',
  11. 'name' => 'string'
  12. ),
  13. 'subject' => 'string',
  14. 'previewTitle' => 'string',
  15. 'html' => 'string'
  16. )
  17. );
  18. $headers = array(
  19. 'Content-Type' => 'application/json',
  20. 'X-Api-Key' => 'YOUR_API_KEY'
  21. );
  22. $ch = curl_init($url);
  23. curl_setopt($ch, CURLOPT_POST, true);
  24. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  25. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  26. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  27. $response = curl_exec($ch);
  28. curl_close($ch);
Если запрос возвращает ошибку: "Неверный ключ API", замените код передачи API-ключа.
  1. import requests
  2. import json
  3. url = 'https://api.beta.rusender.ru/api/v1/external-mails/send'
  4. data = {
  5. 'idempotencyKey': 'unique-key-string',
  6. 'mail': {
  7. 'to': {
  8. 'email': 'user@example.com',
  9. 'name': 'string'
  10. },
  11. 'from': {
  12. 'email': 'user@example.com',
  13. 'name': 'string'
  14. },
  15. 'subject': 'string',
  16. 'previewTitle': 'string',
  17. 'html': 'string'
  18. }
  19. }
  20. headers = {
  21. 'Content-Type': 'application/json',
  22. 'X-Api-Key': 'YOUR_API_KEY'
  23. }
  24. response = requests.post(url, json=data, headers=headers)
  1. const axios = require('axios');
  2. const url = 'https://api.beta.rusender.ru/api/v1/external-mails/send';
  3. const data = {
  4. idempotencyKey: 'unique-key-string',
  5. mail: {
  6. to: {
  7. email: 'user@example.com',
  8. name : 'string'
  9. },
  10. from: {
  11. email: 'user@example.com',
  12. name: 'string'
  13. },
  14. subject: 'string',
  15. previewTitle: 'string',
  16. html: 'string'
  17. }
  18. };
  19. const headers = {
  20. 'Content-Type': 'application/json',
  21. 'X-Api-Key': 'YOUR_API_KEY'
  22. };
  23. axios.post(url, data, { headers })
  24. .then(response => {
  25. // Обработка ответа API
  26. })
  27. .catch(error => {
  28. // Обработка ошибки
  29. });
  1. const url = 'https://api.beta.rusender.ru/api/v1/external-mails/send';
  2. const data = {
  3. idempotencyKey: 'unique-key-string',
  4. mail: {
  5. to: {
  6. email: 'user@example.com',
  7. name: 'string'
  8. },
  9. from: {
  10. email: 'user@example.com',
  11. name: 'string'
  12. },
  13. subject: 'string',
  14. previewTitle: 'string',
  15. html: 'string'
  16. }
  17. };
  18. const headers = {
  19. 'Content-Type': 'application/json',
  20. 'X-Api-Key': 'YOUR_API_KEY'
  21. };
  22. fetch(url, {
  23. method: 'POST',
  24. headers: headers,
  25. body: JSON.stringify(data)
  26. })
  27. .then(response => response.json())
  28. .then(data => {
  29. // Обработка ответа API
  30. })
  31. .catch(error => {
  32. // Обработка ошибки
  33. });

Отправка письма с использованием шаблона RuSender

  1. POST 'https://api.beta.rusender.ru/api/v1/external-mails/send-by-template';

В заголовке «X-Api-Key» передать строкой ключ API для аутентификации.

Запрос идентичен обычной отправки письма по API за исключением тела письма (тело не имеет html и text, однако имеет idTemplateMailUser и params).

Пример тела запроса

  1. {
  2. "idempotencyKey": "unique-key-string",
  3. "mail": {
  4. "to": {
  5. "email": "user@example.com",
  6. "name": "string"
  7. },
  8. "from": {
  9. "email": "user@example.com",
  10. "name": "string"
  11. },
  12. "subject": "string",
  13. "previewTitle": "string",
  14. "idTemplateMailUser": number,
  15. "params": {
  16. "test": "string",
  17. "test1": "string",
  18. "test2": "string"
  19. }
  20. }
  21. }

Описание полей

  • from* (От) — адрес отправителя письма;

  • to* (Кому) — адрес получателя письма;

  • subject* (Тема) — содержит тему или заголовок письма;

  • previewTitleпрехедер письма, до 120 символов;

  • idTemplateMailUser — id шаблона из раздела "Мои шаблоны", примечание: Шаблоны из раздела "Галерея" работать не будут;

  • cc и bcc — это адрес получателя копии и адрес получателя скрытой копии;

    • cc (Carbon Copy) — это поле "копия" или "отправить копию". Адресат указанный в CC получит копию сообщения, но все получатели смогут видеть смогут видеть, кому еще были отправлены копии сообщения;

    • bcc (Blind Carbon Copy) — это поле "скрытая копия". Это может быть полезно, если вы хотите отправить копию сообщения кому-то без раскрытия его адреса другим адресатам.

  • params — кастомные переменные для вставки в шаблон;

  • headers — системные заголовки письма (необязательно поле, для опытных пользователей) https://nodemailer.com/message/custom-headers/;

    Принимаем любые системные заголовки, но те которые проставляются нами - имеют приоритет, а именно:

    Return-Path, List-Unsubscribe, Errors-To, X-Complaints-To, Precedence, Feedback-ID, X-SenderName-MailID, X-Mailru-Msgtype, X-Postmaster-Msgtype.

    Кодировку указать нельзя, всегда используется UTF-8.

  • attachments — вложение в письмо (файл), в формате массива файлов структурой вида:

    { "название файла.расширение": "тело файла закодированное в base64"};

  • idempotencyKey (String) — ключ идемпотентности используется для предотвращения повторного выполнения одного и того же запроса.

    Отправка с использованием ключа идемпотентности

    По умолчанию, если в течение одного часа поступает запрос на отправку письма с полностью совпадающими параметрами:

    • отправитель (From);
    • получатель (To);
    • тело письма (Body).

    Такой запрос будет отклонён для предотвращения задвоения писем.

    Если требуется отправка писем с одинаковыми параметрами (например, уведомление «Ваш комментарий одобрен»), необходимо использовать кастомный ключ идемпотентности «idempotencyKey», который должен быть передан вне блока «mail» в запросе. При различающемся «idempotencyKey» письма будут считаться разными и будут успешно отправлены.

Примеры использования API с шаблоном письма RuSender

  1. $url = 'https://api.beta.rusender.ru/api/v1/external-mails/send-by-template';
  2. $data = array(
  3. 'idempotencyKey' => 'unique-key-string',
  4. 'mail' => array(
  5. 'to' => array(
  6. 'email' => 'user@example.com',
  7. 'name' => 'string'
  8. ),
  9. 'from' => array(
  10. 'email' => 'user@example.com',
  11. 'name' => 'string'
  12. ),
  13. 'subject' => 'string',
  14. 'previewTitle' => 'string',
  15. 'idTemplateMailUser' => number,
  16. 'params' => array(
  17. 'test' => 'string',
  18. 'test1' => 'string',
  19. 'test2' => 'string'
  20. )
  21. )
  22. );
  23. $headers = array(
  24. 'Content-Type' => 'application/json',
  25. 'X-Api-Key' => 'YOUR_API_KEY'
  26. );
  27. $ch = curl_init($url);
  28. curl_setopt($ch, CURLOPT_POST, true);
  29. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  30. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  31. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  32. $response = curl_exec($ch);
  33. curl_close($ch);
  1. import requests
  2. import json
  3. url = 'https://api.beta.rusender.ru/api/v1/external-mails/send-by-template'
  4. data = {
  5. 'idempotencyKey': 'unique-key-string',
  6. 'mail': {
  7. 'to': {
  8. 'email': 'user@example.com',
  9. 'name': 'string'
  10. },
  11. 'from': {
  12. 'email': 'user@example.com',
  13. 'name': 'string'
  14. },
  15. 'subject': 'string',
  16. 'previewTitle': 'string',
  17. 'idTemplateMailUser': number,
  18. 'params': {
  19. 'test': 'string',
  20. 'test1': 'string',
  21. 'test2': 'string'
  22. }
  23. }
  24. }
  25. headers = {
  26. 'Content-Type': 'application/json',
  27. 'X-Api-Key': 'YOUR_API_KEY'
  28. }
  29. response = requests.post(url, json=data, headers=headers)
  1. const axios = require('axios');
  2. const url = 'https://api.beta.rusender.ru/api/v1/external-mails/send-by-template';
  3. const data = {
  4. idempotencyKey: 'unique-key-string',
  5. mail: {
  6. to: {
  7. email: 'user@example.com',
  8. name: 'string'
  9. },
  10. from: {
  11. email: 'user@example.com',
  12. name: 'string'
  13. },
  14. subject: 'string',
  15. previewTitle: 'string',
  16. idTemplateMailUser: number,
  17. params: {
  18. test: 'string',
  19. test1: 'string',
  20. test2: 'string'
  21. }
  22. }
  23. };
  24. const headers = {
  25. 'Content-Type': 'application/json',
  26. 'X-Api-Key': 'YOUR_API_KEY'
  27. };
  28. axios.post(url, data, { headers })
  29. .then(response => {
  30. // Обработка ответа API
  31. })
  32. .catch(error => {
  33. // Обработка ошибки
  34. });
  1. const url = 'https://api.beta.rusender.ru/api/v1/external-mails/send-by-template';
  2. const data = {
  3. idempotencyKey: 'unique-key-string',
  4. mail: {
  5. to: {
  6. email: 'user@example.com',
  7. name: 'string'
  8. },
  9. from: {
  10. email: 'user@example.com',
  11. name: 'string'
  12. },
  13. subject: 'string',
  14. previewTitle: 'string',
  15. idTemplateMailUser: number,
  16. params: {
  17. test: 'string',
  18. test1: 'string',
  19. test2: 'string'
  20. }
  21. }
  22. };
  23. const headers = {
  24. 'Content-Type': 'application/json',
  25. 'X-Api-Key': 'YOUR_API_KEY'
  26. };
  27. fetch(url, {
  28. method: 'POST',
  29. headers: headers,
  30. body: JSON.stringify(data)
  31. })
  32. .then(response => response.json())
  33. .then(data => {
  34. // Обработка ответа API
  35. })
  36. .catch(error => {
  37. // Обработка ошибки
  38. });
Если запрос возвращает ошибку: "Неверный ключ API", замените код передачи API-ключа.