Перейти к документации
Java

Отправка письма

Одно сообщение сейчас или позже, с вложениями, или сотня за один запрос.

Отправка сообщения

Send.java
Map<String, Object> email = client.emails().send(Body.of(    "from", "Acme Billing <[email protected]>",    "to", List.of("[email protected]", Body.of("email", "[email protected]", "name", "Grace")),    "replyTo", "[email protected]",    "subject", "Your September invoice",    "html", "<p>Invoice attached.</p>",    "text", "Invoice attached."), RequestOptions.create().idempotencyKey("invoice-2026-09-ada")); System.out.println(email.get("id") + " " + email.get("status"));

to, cc и bcc принимают один адрес или список, а адрес представляет собой текст вида Ada <[email protected]> или map с email и name. Тело берётся из html и text, из сохранённого template или из draftId.

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

Вложения

Attachments.java
byte[] report = "month,total".getBytes(StandardCharsets.UTF_8); client.emails().send(Body.of(    "from", "[email protected]",    "to", "[email protected]",    "subject", "Your September report",    "text", "The report is attached.",    "attachments", List.of(        Body.of("filename", "report.csv", "content", report, "contentType", "text/csv"),        Body.of("fileId", "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f")    )));

content принимает byte[] или Path, которые клиент кодирует в base64, либо текст, который уже является base64. fileId называет файл, загруженный через client.files().upload, и именно так отправляется файл больше 5 МБ.

Отправка позже

Schedule.java
Map<String, Object> scheduled = client.emails().send(Body.of(    "from", "[email protected]",    "to", "[email protected]",    "subject", "Your invoice is due tomorrow",    "text", "A reminder that your invoice is due tomorrow.",    "scheduledAt", Instant.now().plus(Duration.ofHours(1)))); String id = (String) scheduled.get("id"); client.emails().reschedule(id, Instant.now().plus(Duration.ofHours(2)));client.emails().cancel(id);

scheduledAt принимает Instant, момент времени ISO 8601 в виде текста или длительность, например PT1H. Instant, OffsetDateTime или ZonedDateTime в любом месте тела отправляется как момент времени ISO 8601 в UTC. Запланированное сообщение можно изменить или отменить, пока оно не ушло.

Отправка пакета

Batch.java
BatchResult batch = client.emails().sendBatch(List.of(    Body.of("from", "[email protected]", "to", "[email protected]", "subject", "Your invoice", "text", "Invoice attached."),    Body.of("from", "[email protected]", "to", "[email protected]", "subject", "Your invoice", "text", "Invoice attached."))); for (Map<String, Object> item : batch) {    if ("error".equals(item.get("status"))) {        System.err.println(item.get("index") + " " + item.get("error"));    }} System.out.println(batch.sent() + " sent, " + batch.failed() + " failed");

Пакет вмещает до 100 сообщений и никогда не работает по принципу всё или ничего: неверный адрес приводит к сбою только своего элемента, а остальные всё равно уходят. Проверяйте failed() и status каждого элемента, а не полагайтесь на исключение.