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

Java SDK

Координаты Maven com.dashamail:dashamail-java. HTTP — через java.net.http.HttpClient (в JDK с 11-й версии); JSON — через крошечный кодек внутри самой библиотеки, поскольку в JDK своего нет.

Mavencom.dashamail:dashamail-java:1.0.0
Gradleimplementation 'com.dashamail:dashamail-java:1.0.0'
ТребованияJava 11+
Пакетcom.dashamail.sdk, ресурсы — в com.dashamail.sdk.resources
Исходникиgithub.com/DashaMail/dashamail-java
ЛицензияMIT

В JDK нет ни javax.json, ни любого другого JSON-парсера в стандартной поставке. Чтобы не тащить Jackson, Gson или org.json как зависимость, библиотека несёт свой минимальный класс com.dashamail.sdk.internal.Json — только для разбора и сборки тел запросов и ответов этого API.

Быстрый старт #

import com.dashamail.sdk.DashaMailClient;
import com.dashamail.sdk.DashaMailResponse;

DashaMailClient dashamail = new DashaMailClient("YOUR_API_KEY");

DashaMailResponse balance = dashamail.account().balance();
System.out.println(balance.get("balance"));

DashaMailResponse created = dashamail.lists().create("Newsletter");
Map<String, Object> fields = new HashMap<>();
fields.put("merge_1", "Иван");
dashamail.lists().addMember(created.get("list_id"), "subscriber@example.com", fields);

Map<String, Object> params = new HashMap<>();
params.put("subject", "Добро пожаловать");
dashamail.transactional().send(
    "subscriber@example.com",
    "sender@yourdomain.com",
    "<p>Спасибо за подписку!</p>",
    params
);

Ресурсы #

DashaMailClient — фасад с одним геттером на каждый раздел API, типы — в com.dashamail.sdk.resources. Вызовы синхронные (блокирующие) и возвращают DashaMailResponse (оборачивает data как Map<String, Object> или List<Object>, реализует Iterable) либо бросают DashaMailApiException. Необязательные параметры — завершающий Map<String, Object>; у каждого такого метода есть перегрузка без этого аргумента.

ГеттерКлассРаздел
.lists()resources.ListsАдресные базы
.segments()resources.SegmentsСегменты
.campaigns()resources.CampaignsРассылки, включая A/B-тесты
.automations()resources.AutomationsАвтоматизации
.workflows()resources.WorkflowsСценарии визуального конструктора
.templates()resources.TemplatesШаблоны
.reports()resources.ReportsОтчёты, включая результаты A/B
.transactional()resources.TransactionalТранзакционные письма
.account()resources.AccountАккаунт
.dialogs()resources.DialogsДиалоги
.router()resources.RouterОбработка входящих
.images()resources.ImagesИзображения

Публичные типы вроде DashaMailResponse и DashaMailApiException намеренно с префиксом DashaMail — короткие имена вроде Response легко столкнутся с типами из других библиотек в вашем проекте. Все исключения непроверяемые (RuntimeException), вызывающий код не обязан их объявлять.

Пагинация #

int start = 0;
while (true) {
    Map<String, Object> page = new HashMap<>();
    page.put("start", start);
    page.put("limit", 100);
    DashaMailResponse members = dashamail.lists().members(listId, page);
    for (Object member : members) {
        Map<?, ?> dict = (Map<?, ?>) member;
        System.out.println(dict.get("email"));
    }
    start += members.getLimit() != null ? members.getLimit() : 0;
    if (!members.hasMore()) break;
}

Ошибки #

Каждый неуспешный ответ бросает подкласс DashaMailApiException, выбранный по HTTP-статусу. У любого исключения есть getApiCode() — тот же код, что в справочнике ошибок, getHttpStatus() и getDetails().

HTTPКласс исключения
401DashaMailAuthenticationException
402DashaMailPaymentRequiredException
403DashaMailAuthorizationException
404DashaMailNotFoundException
409DashaMailConflictException
413DashaMailPayloadTooLargeException
422DashaMailValidationException
429DashaMailRateLimitException — есть getRetryAfter()
5xxDashaMailServerException

Если ответ вообще не пришёл (обрыв сети, таймаут) — бросается DashaMailNetworkException, отдельно от ошибок самого API.

Изображения #

// Готовый файл на диске — без ручного base64:
DashaMailResponse result = dashamail.images().optimizeFile("/path/to/banner.png");

// Сырые байты в ответ вместо base64 в JSON:
DashaMailBinaryResponse binary = dashamail.images().optimizeFileBinary("/path/to/banner.png");
binary.saveTo("/path/to/banner-optimized.png");

Полная документация — в README репозитория. Вернуться к обзору всех SDK.

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

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