2017-06-28 20 views
1

以下のBeanをappconfigに登録します。私のサービスでコンストラクタインジェクションを使用してこのBeanを使用する方法私はuserid、パスワードを動的に渡す必要があります。動的資格情報を使用してSpring 4を使用して電子メールを送信する方法

@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自動配線を使用して電子メールを送信してもらえますか?

+0

は、それが正常に動作します –

答えて

0

別の資格情報の別のインスタンス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("[email protected]", "123456"); 
     mailSender.send(...); 
    } 
} 
+0

http://www.baeldung.com/spring-emailを参照してください。どうもありがとうございます :) – Shakthi

関連する問題