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");