Свойства Email
Свойства Spring Boot Mail
Используйте свойства Spring Boot для почты, чтобы определить основные параметры отправки писем, такие как протокол, хост, порт и другие.
Например:
spring.mail.host=smtp.company.com
spring.mail.port=587
spring.mail.protocol=smtp
spring.mail.username=username
spring.mail.password=password
Также вы можете указать свойства JavaMail в формате spring.mail.properties.*. Например, свойство mail.smtp.auth можно задать следующим образом:
spring.mail.properties.mail.smtp.auth=true
Свойства Jmix Email
Свойства Jmix email позволяют настроить функциональность, описанную в разделе Email Sending API.
jmix.email.from-address
Определяет адрес отправителя по умолчанию. Используется, если атрибут EmailInfo.from не указан.
Значение по умолчанию: DoNotReply@localhost
jmix.email.scheduled-sending-delay-call-count
Свойство используется при асинхронной отправке писем для пропуска первых нескольких вызовов Emailer.processQueuedEmails() после запуска сервера, чтобы снизить нагрузку во время инициализации приложения. Отправка писем начнется со следующего вызова.
Значение по умолчанию: 2
jmix.email.message-queue-capacity
Свойство используется для асинхронной отправки, максимальное количество сообщений, читаемых из очереди и отправляемых за один вызов Emailer.processQueuedEmails().
Значение по умолчанию: 100
jmix.email.default-sending-attempts-limit
Свойство используется для асинхронной отправки, количество попыток отправить письмо по умолчанию. Используется, если параметр attemptsCount не указан при вызове Emailer.sendEmailAsync().
Значение по умолчанию: 10
jmix.email.sending-timeout-sec
Определяет максимально ожидаемое время в секундах, необходимое для отправки письма на SMTP-сервер. Используется для асинхронной отправки для оптимизации выборки объектов SendingMessage из базы данных.
Значение по умолчанию: 240
jmix.email.admin-address
Определяет адрес, на который отправляются все сообщения, если включено свойство jmix.email.send-all-to-admin.
Значение по умолчанию: admin@localhost
jmix.email.send-all-to-admin
Указывает, что все сообщения должны отправляться на адрес jmix.email.admin-address, независимо от указанного адреса получателя. Рекомендуется использовать этот параметр во время разработки и отладки системы.
Значение по умолчанию: false
jmix.email.use-file-storage
При включении текст тела письма и вложения будут храниться в файловом хранилище, а не в BLOB-столбцах базы данных. Следует использовать, если приложение хранит много писем и/или вложений к письмам.
Значение по умолчанию: false
jmix.email.async-sending-username
Определяет логин системного пользователя, используемого кодом асинхронной отправки писем для возможности сохранения информации в базе данных. Рекомендуется создать отдельного пользователя (например, emailer) без пароля, чтобы под его именем было невозможно войти через пользовательский интерфейс. Это также удобно для поиска сообщений, связанных с отправкой писем, в логе сервера.
Значение по умолчанию: admin
jmix.email.use-default-quartz-configuration
Определяет, используется ли конфигурация Quartz по умолчанию для отправки писем.
Значение по умолчанию: true
jmix.email.email-sending-cron
Определяет CRON-выражение, которое используется по умолчанию в конфигурации планирования Quartz для отправки писем.
Значение по умолчанию: 0 * * * * ? (каждую минуту).
jmix.email.use-default-email-cleaning-quartz-configuration
Определяет, используется ли конфигурация Quartz по умолчанию для очистки писем.
Значение по умолчанию: false
jmix.email.email-cleaning-cron
Определяет CRON-выражение, которое используется по умолчанию в конфигурации планирования Quartz для очистки писем.
Значение по умолчанию: 0 0 0 * * ? (в начале каждого дня)
jmix.email.max-age-of-important-messages
Определяет максимальный возраст (в днях) важных сообщений, после которого они должны быть удалены. Значение ноль (0) означает, что сообщения не будут удаляться.
Значение по умолчанию: 0
jmix.email.max-age-of-non-important-messages
Определяет максимальный возраст (в днях) сообщений, после которого они должны быть удалены. Значение ноль (0) означает, что сообщения не будут удаляться.
Значение по умолчанию: 0
jmix.email.clean-file-storage
Определяет, должна ли выполняться очистка файлового хранилища во время работы планировщика очистки.
Значение по умолчанию: false
Планировщик отправки писем
При вызове метода Emailer.sendEmailAsync() письмо не отправляется, а ставится в очередь в базе данных. Для отправки писем из очереди необходимо вызвать метод Emailer.processQueuedEmails().
Вы можете использовать планировщик заданий Quartz для периодической обработки очереди писем, как описано ниже.
Конфигурация Quartz по умолчанию
Дополнение Email Sending предоставляет конфигурацию задачи Quartz по умолчанию для обработки очереди отправки писем. Чтобы использовать ее, выполните следующие действия:
-
Включите дополнение Quartz в свой проект, как описано в разделе Quartz / Установка.
-
При необходимости измените CRON-выражение, используя свойство jmix.email.email-sending-cron:
jmix.email.email-sending-cron=* 0/2 * * * ?
Пользовательская конфигурация Quartz
Если вы хотите использовать пользовательскую конфигурацию задачи Quartz, выполните следующие действия:
-
Включите дополнение Quartz в свой проект, как описано в разделе Quartz / Установка.
-
Установите значение свойства приложения jmix.email.use-default-quartz-configuration в
false:jmix.email.use-default-quartz-configuration = false -
Создайте класс задачи:
import io.jmix.email.Emailer; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; public class MyCustomEmailSendingJob implements Job { @Autowired private Emailer emailer; @Override public void execute(JobExecutionContext context) throws JobExecutionException { emailer.processQueuedEmails(); } } -
В работающем приложении откройте экран Quartz → Quartz jobs и настройте задачу для класса
MyCustomEmailSendingJob. -
Альтернативно, если вы хотите настроить задачу отправки писем на этапе разработки, добавьте следующие бины в основной класс приложения:
@Bean JobDetail myCustomEmailSendingJob() { return JobBuilder.newJob() (1) .ofType(MyCustomEmailSendingJob.class) .storeDurably() .withIdentity("emailSending") .build(); (2) } @Bean Trigger myCustomEmailSendingTrigger() { return TriggerBuilder.newTrigger() (3) .forJob(myCustomEmailSendingJob()) (4) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("* 0/2 * * * ?")) .build(); (5) }1 Начните построение определения задачи с помощью класса org.quartz.JobBuilder.2 Создайте экземпляр org.quartz.JobDetail.3 Начните построение определения триггера с помощью класса org.quartz.TriggerBuilder.4 Свяжите этот триггер с ранее определенной задачей. 5 Создайте экземпляр org.quartz.Trigger.
Планировщик очистки писем
Дополнение имеет встроенную задачу Quartz для очистки, которая по умолчанию выключена. Вы можете использовать ее для периодической очистки сохраненных писем, как описано ниже.
Если вам нужно хранить некоторые письма дольше, используйте флаг important и установите максимальный возраст для важных и неважных писем. Вы можете установить этот флаг с помощью метода setImportant() у EmailInfoBuilder.
Конфигурация Quartz по умолчанию
Чтобы использовать конфигурацию задачи Quartz по умолчанию для регулярной очистки писем, выполните следующие действия:
-
Включите дополнение Quartz в свой проект, как описано в разделе Quartz / Установка.
-
Установите значение свойства jmix.email.use-default-email-cleaning-quartz-configuration в
true:jmix.email.use-default-email-cleaning-quartz-configuration=true -
При необходимости измените CRON-выражение, используя свойство jmix.email.email-cleaning-cron.
jmix.email.email-cleaning-cron=0 0 0 1/2 * ? -
Установите возраст для важных и неважных писем, используя свойства jmix.email.max-age-of-important-messages и jmix.email.max-age-of-non-important-messages, например:
jmix.email.max-age-of-non-important-messages=5 jmix.email.max-age-of-important-messages=30 -
Установите значение свойства jmix.email.clean-file-storage в
true, если вы хотите удалять вложения.
Пользовательская конфигурация Quartz
Если вы хотите использовать пользовательскую конфигурацию задачи Quartz, выполните следующие действия:
-
Включите дополнение Quartz в свой проект, как описано в разделе Quartz / Установка.
-
Создайте класс задачи:
import io.jmix.email.EmailCleaner; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; public class MyCustomEmailCleaningJob implements Job { @Autowired private EmailCleaner emailCleaner; @Override public void execute(JobExecutionContext context) throws JobExecutionException { emailCleaner.deleteOldEmails(); } } -
В работающем приложении откройте экран Quartz → Quartz jobs и настройте задачу для класса
MyCustomEmailCleaningJob. -
Альтернативно, если вы хотите настроить задачу очистки писем на этапе разработки, добавьте следующие бины в основной класс приложения:
@Bean JobDetail myCustomEmailCleaningJob() { return JobBuilder.newJob() (1) .ofType(MyCustomEmailCleaningJob.class) .storeDurably() .withIdentity("emailCleaning") .build(); (2) } @Bean Trigger MyCustomEmailCleaningTrigger() { return TriggerBuilder.newTrigger() (3) .forJob(myCustomEmailCleaningJob()) (4) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 1/2 * ? ")) .build(); (5) }1 Начните построение определения задачи с помощью класса org.quartz.JobBuilder.2 Создайте экземпляр org.quartz.JobDetail.3 Начните построение определения триггера с помощью класса org.quartz.TriggerBuilder.4 Свяжите этот триггер с ранее определенной задачей. 5 Создайте экземпляр org.quartz.Trigger. -
Установите возраст для важных и неважных писем, используя свойства jmix.email.max-age-of-important-messages и jmix.email.max-age-of-non-important-messages, например:
jmix.email.max-age-of-non-important-messages=5 jmix.email.max-age-of-important-messages=30 -
Установите значение свойства jmix.email.clean-file-storage в
true, если вы хотите удалять вложения.
Использование файлового хранилища
Вы можете хранить текст тела письма и вложения в файловом хранилище вместо BLOB-столбцов в базе данных.
Чтобы использовать файловое хранилище:
-
Убедитесь, что следующая строка присутствует в разделе
dependenciesвашего файлаbuild.gradle:implementation 'io.jmix.localfs:jmix-localfs-starter' -
Включите использование файлового хранилища. Установите в файле
application.properties:jmix.email.use-file-storage=true
По умолчанию локальное файловое хранилище находится в рабочем каталоге приложения по пути ${user.dir}/.jmix/work/filestorage.