Как настроить два разных письма в Springboot? - PullRequest
0 голосов
/ 20 сентября 2018

Я знаю, что могу использовать следующие свойства для автоматического создания компонента JavaMailSender:

spring.mail.host=hostname
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password

Однако как я могу определить эти свойства для создания двух компонентов JavaMailSender, чтобы я мог отправлять электронные письма отразные SMTP-серверы?

Я попытался определить следующие свойства:

# Properties for sender 1
spring.mail.host=hostname
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password

# Properties for sender 2
spring.mail.host1=hostname2
spring.mail.port1=587
spring.mail.username1=username2
spring.mail.password1=password2

Однако это не работает так, как я ожидал, так как я могу создать два компонента JavaMailSender с помощью Spring boot?

1 Ответ

0 голосов
/ 20 сентября 2018

Создание bean-компонентов

Spring boot инициализирует только один JavaMailSender, как только обнаружит свойства spring.mail.*.Если вам нужно несколько, вы должны определить эти бины самостоятельно.Если вам нужны только свойства host, port, username и password, вы можете использовать эту простую конфигурацию:

@Configuration
public class MailConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "spring.mail.primary")
    public JavaMailSender primarySender() {
        return new JavaMailSenderImpl();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.mail.secondary")
    public JavaMailSender secondarySender() {
        return new JavaMailSenderImpl();
    }
}

Однако, это не будет работать , если вы также хотите настроить spring.mail.properties.* также.Чтобы сделать это, ваша конфигурация будет немного более сложной, так как вам нужно будет сделать следующее:

  • Создайте два bean-компонента из MailProperties, используя тот же @ConfigurationProperties, как вы можетесм. выше.
  • Используйте MailProperties аналогично тому, как это делает Spring boot в MailSenderPropertiesConfiguration.

Конфигурация

После этого вы можете использовать свойства spring.mail.primary.* и spring.mail.secondary.*, как вы привыкли.Например:

spring.mail.primary.host=host1
spring.mail.primary.port=port1
spring.mail.primary.username=username1
spring.mail.primary.password=password1
spring.mail.secondary.host=host2
spring.mail.secondary.port=port2
spring.mail.secondary.username=username2
spring.mail.secondary.password=password2

Использование

После этого вы можете автоматически подключать как primarySender, так и secondarySender.Обязательно используйте аннотацию @Qualifier, чтобы сообщить Spring, какой:

@Service
public class MailService {
    private JavaMailSender primarySender;
    private JavaMailSender secondarySender;

    public MailService(
        @Qualifier("primarySender") JavaMailSender primarySender,
        @Qualifier("secondarySender") JavaMailSender secondarySender) {
        this.primarySender = primarySender;
        this.secondarySender = secondarySender;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...