.NET SDK
Пакет NuGet DashaMail. Работает на System.Net.Http.HttpClient
и встроенном с .NET 5 System.Text.Json — без единого внешнего пакета.
| Установка | dotnet add package DashaMail |
| Требования | .NET 6.0+ |
| Пространство имён | DashaMail, ресурсы — в DashaMail.Resources |
| Исходники | github.com/DashaMail/dashamail-dotnet |
| Лицензия | MIT |
SDK нацелен на net6.0, а не netstandard2.0: только
начиная с .NET 5 System.Text.Json идёт в составе рантайма без
отдельного NuGet-пакета. Более старый таргет означал бы внешнюю зависимость
ради JSON — этого мы как раз избегаем.
Быстрый старт #
using DashaMail;
var dashamail = new DashaMailClient("YOUR_API_KEY");
var balance = await dashamail.Account.BalanceAsync();
Console.WriteLine(balance["balance"]);
var created = await dashamail.Lists.CreateAsync("Newsletter");
await dashamail.Lists.AddMemberAsync(created["list_id"], "subscriber@example.com",
new Dictionary<string, object> { { "merge_1", "Иван" } });
await dashamail.Transactional.SendAsync(
"subscriber@example.com",
"sender@yourdomain.com",
"<p>Спасибо за подписку!</p>",
new Dictionary<string, object> { { "subject", "Добро пожаловать" } });
Ресурсы #
DashaMailClient — фасад с одним свойством на каждый раздел API,
типы — в DashaMail.Resources. Методы Task-based
(суффикс Async) и возвращают DashaMailResponse
(оборачивает data как Dictionary<string, object>
или List<object>, перебирается через foreach)
либо бросают DashaMailApiException. Необязательные параметры —
завершающий Dictionary<string, object>, поскольку у API
слишком много полей, чтобы у каждого был свой типизированный аргумент.
| Свойство | Класс | Раздел |
|---|---|---|
.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 легко
столкнутся с типами из других библиотек в вашем проекте.
Пагинация #
int start = 0;
while (true)
{
var page = await dashamail.Lists.MembersAsync(listId,
new Dictionary<string, object> { { "start", start }, { "limit", 100 } });
foreach (var member in page) { /* ... */ }
start += page.Limit ?? 0;
if (!page.HasMore) break;
}
Ошибки #
Каждый неуспешный ответ бросает подкласс DashaMailApiException,
выбранный по HTTP-статусу. У любого исключения есть ApiCode — тот
же код, что в справочнике ошибок, HttpStatus
и Details. Все исключения непроверяемые (RuntimeException),
так что вызывающий код не обязан их объявлять.
| HTTP | Класс исключения |
|---|---|
| 401 | DashaMailAuthenticationException |
| 402 | DashaMailPaymentRequiredException |
| 403 | DashaMailAuthorizationException |
| 404 | DashaMailNotFoundException |
| 409 | DashaMailConflictException |
| 413 | DashaMailPayloadTooLargeException |
| 422 | DashaMailValidationException |
| 429 | DashaMailRateLimitException — есть RetryAfter |
| 5xx | DashaMailServerException |
Если ответ вообще не пришёл (обрыв сети, таймаут) — бросается
DashaMailNetworkException, отдельно от ошибок самого API.
Изображения #
// Готовый файл на диске — без ручного base64:
var result = await dashamail.Images.OptimizeFileAsync("/path/to/banner.png");
// Сырые байты в ответ вместо base64 в JSON:
var binary = await dashamail.Images.OptimizeFileBinaryAsync("/path/to/banner.png");
binary.SaveTo("/path/to/banner-optimized.png");
Полная документация — в README репозитория. Вернуться к обзору всех SDK.