Email Sending API

Методы отправки

Для отправки электронных писем используйте следующие методы бина Emailer:

  • sendEmail() – синхронная отправка сообщения. Вызывающий код блокируется во время отправки сообщения на SMTP-сервер. Вы можете указать сообщение либо набором параметров - списком получателей, разделенным запятыми, темой, содержимым, массивом вложений; либо в виде специального объекта EmailInfo, который инкапсулирует всю эту информацию и позволяет явно задать адрес отправителя.

    Вот пример отправки письма с использованием объекта EmailInfo:

    @Autowired
    private Emailer emailer; (1)
    
    private void sendByEmailInfo() throws EmailException {
        EmailInfo emailInfo = EmailInfoBuilder.create("john.doe@company.com",
                        "Email subject", "Email body")
                .build(); (2)
        emailer.sendEmail(emailInfo); (3)
    }
    1 Инжектируйте интерфейс io.jmix.email.Emailer.
    2 Создайте объект io.jmix.email.EmailInfo, используя io.jmix.email.EmailInfoBuilder.
    3 Отправьте письмо синхронно.

    Во время синхронной отправки фреймворк может выбросить EmailException с информацией о неудачных адресах получателей и соответствующими сообщениями об ошибках.

    Во время выполнения метода в базе данных создается один экземпляр SendingMessage для всех получателей. Он имеет начальный статус SendingStatus.SENDING, и SendingStatus.SENT после успешной отправки. В случае ошибки отправки сообщения статус сообщения меняется на SendingStatus.NOT_SENT.

  • sendEmailAsync() - асинхронная отправка сообщения. Этот метод возвращает экземпляр SendingMessage со статусом SendingStatus.QUEUE, который был создан в базе данных. Фактическая отправка выполняется позже методом Emailer.processQueuedEmails(), который должен вызываться планировщиком.

Вложения электронной почты

Объект io.jmix.email.EmailAttachment - это обертка, которая хранит вложение в виде массива байтов, имя файла и, при необходимости, идентификатор вложения, уникальный для данного сообщения.

EmailAttachment emailAttachment = new EmailAttachment(bytes, "logo.png", "logoId");

Идентификатор вложения - это необязательное, но полезное поле, когда вы хотите вставить изображения в тело сообщения. Для этого укажите уникальный contentId при создании EmailAttachment, как logoId в примере выше. Чтобы вставить изображение в тело сообщения, используйте выражение вида cid:logoId в качестве пути к вложению, например:

<img src="cid:logoId"/>

Также вы можете создать текстовое вложение из строки и указать кодировку и имя файла вложения. В примере создается и отправляется вложение с письмом:

String attachment = "<html><body><h1>Content of attachment</h1></body></html>";
EmailAttachment emailAttachment = EmailAttachment.createTextAttachment(attachment, StandardCharsets.UTF_8.name(), "attachment.html");