Java 如何使用Spring4使用动态凭据发送电子邮件
我在appconfig中注册下面的bean。如何在我的服务中使用构造函数注入来使用这个bean?我需要动态地传递用户ID和密码Java 如何使用Spring4使用动态凭据发送电子邮件,java,spring,email,Java,Spring,Email,我在appconfig中注册下面的bean。如何在我的服务中使用构造函数注入来使用这个bean?我需要动态地传递用户ID和密码 @Bean public JavaMailSender getMailSender(JavaMailerDTO javaMailer){ JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setJavaMailProperties(mailProperties(ja
@Bean
public JavaMailSender getMailSender(JavaMailerDTO javaMailer){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setJavaMailProperties(mailProperties(javaMailer));
mailSender.setHost(javaMailer.getHost());
mailSender.setUsername(javaMailer.getEmailId());
mailSender.setPassword(javaMailer.getEmailPassword());
mailSender.setPort(Integer.parseInt(javaMailer.getPort()));
return mailSender;
}
private Properties mailProperties(JavaMailerDTO javaMailer){
Properties properties = new Properties();
properties.put(ApplicationConstant.MAIL_AUTH, ApplicationConstant.TRUE);
// .....
properties.put(ApplicationConstant.MAIL_SMTPPORT,javaMailer.getPort());
return properties;
}
您能帮助我使用上述bean自动连线发送电子邮件吗?我建议您创建一个工厂,为您创建一个单独的实例
JavaMailSender
,用于不同的凭据
大概是这样的:
public interface MailSenderFactory {
JavaMailSender getSender(String email, String password);
}
@Component
public static class MailSenderFactoryImpl implements MailSenderFactory {
private final JavaMailerDTO javaMailer;
@Autowired
public MailSenderFactoryImpl(JavaMailerDTO javaMailer) {
this.javaMailer = javaMailer;
}
@Override
public JavaMailSender getSender(final String email, final String password) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setJavaMailProperties(mailProperties(javaMailer));
mailSender.setHost(javaMailer.getHost());
mailSender.setUsername(email);
mailSender.setPassword(password);
mailSender.setPort(Integer.parseInt(javaMailer.getPort()));
return mailSender;
}
private Properties mailProperties(JavaMailerDTO javaMailer) {
Properties properties = new Properties();
properties.put(ApplicationConstant.MAIL_AUTH, ApplicationConstant.TRUE);
// .....
properties.put(ApplicationConstant.MAIL_SMTPPORT, javaMailer.getPort());
return properties;
}
}
@Service
public static class MailService {
private final MailSenderFactory mailSenderFactory;
public MailService(MailSenderFactory mailSenderFactory) {
this.mailSenderFactory = mailSenderFactory;
}
public void sendMail() {
JavaMailSender mailSender = mailSenderFactory.getSender("john.smith@gmail.com", "123456");
mailSender.send(...);
}
}
现在您可以这样使用它:
public interface MailSenderFactory {
JavaMailSender getSender(String email, String password);
}
@Component
public static class MailSenderFactoryImpl implements MailSenderFactory {
private final JavaMailerDTO javaMailer;
@Autowired
public MailSenderFactoryImpl(JavaMailerDTO javaMailer) {
this.javaMailer = javaMailer;
}
@Override
public JavaMailSender getSender(final String email, final String password) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setJavaMailProperties(mailProperties(javaMailer));
mailSender.setHost(javaMailer.getHost());
mailSender.setUsername(email);
mailSender.setPassword(password);
mailSender.setPort(Integer.parseInt(javaMailer.getPort()));
return mailSender;
}
private Properties mailProperties(JavaMailerDTO javaMailer) {
Properties properties = new Properties();
properties.put(ApplicationConstant.MAIL_AUTH, ApplicationConstant.TRUE);
// .....
properties.put(ApplicationConstant.MAIL_SMTPPORT, javaMailer.getPort());
return properties;
}
}
@Service
public static class MailService {
private final MailSenderFactory mailSenderFactory;
public MailService(MailSenderFactory mailSenderFactory) {
this.mailSenderFactory = mailSenderFactory;
}
public void sendMail() {
JavaMailSender mailSender = mailSenderFactory.getSender("john.smith@gmail.com", "123456");
mailSender.send(...);
}
}
参考