2016-11-04 2 views
0

나는 5 smtp 서버를 가지고 있고 대량 메일 링을 원하고 각 서버에 게시하고 싶은데 어떻게 할 수 있습니까? 나는이 지금과 같이 사용하고 있습니다 :smtp 서버와의 연결 풀링

String smtpHost=”smtp.gmail.com”; 
javaMailSender.setHost(smtpHost); 
Properties mailProps = new Properties(); 
mailProps.put(“mail.smtp.connectiontimeout”, “2000”); 
mailProps.put(“mail.smtp.timeout”, “2000”); 
mailProps.put(“mail.debug”, “false”); 
javaMailSender.setJavaMailProperties(mailProps); 

지금 난 당신이 내가 이것을 달성하는 방법을 제안 할 수있는 여러 VIP의

String smtpHost=”192.168.xx.xx,192.168.xx.xx,192.168.xx.xx”; 

등에 게시 할?

답변

0

SmtpConnectionPool을 사용할 수 있습니다.

다른 서버의 속성으로 세션을 만듭니다. 당신이 잡을 수있는 메일을 보내는 동안

Properties mailServerProperties = new Properties(); 
mailServerProperties.put("mail.smtp.port",String.valueOf(port)); 
Session session = Session.getDefaultInstance(mailServerProperties); 

그런 다음지도

pools.put(ip, smtpConnectionPool); 

에 IP 당 풀을 perisit 수

GenericObjectPoolConfig config = new GenericObjectPoolConfig(); 
config.setMaxTotal(5); 

SmtpConnectionFactory smtpConnectionFactory = SmtpConnectionFactoryBuilder.newSmtpBuilder() 
              .session(session).port(port).protocol("smtp") 
               .build(); 
SmtpConnectionPool smtpConnectionPool = new SmtpConnectionPool(smtpConnectionFactory, config); 

응용 프로그램의 시작 부분에서, SmtpConnectionPool는 IP 당 말할 만들기 지도에서 풀을 만든 다음 수영장에서 연결을 빌려 우편을 보내십시오.

SmtpConnectionPool smtpConnectionPool = pools.get(ip); 
try (ClosableSmtpConnection transport = smtpConnectionPool.borrowObject()) { 

    MimeMessage mimeMessage = new MimeMessage(transport.getSession()); 
    mimeMessage.setFrom(new InternetAddress(email.getFrom())); 
    mimeMessage.addRecipients(MimeMessage.RecipientType.TO, Util.getAddresses(email.getTo())); 
    mimeMessage.setSubject(email.getSubject()); 
    mimeMessage.setContent(email.getBody(), "text/html"); 
    transport.sendMessage(mimeMessage); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

대량 메일 전송은 백그라운드 작업이어야하므로 일부 대기열 정렬 메커니즘을 고려해야합니다.

+0

감사합니다. Anuj, SMTP 풀링이 도움이되었습니다. – Sachin

+0

도움이 되니 기쁩니다 !!! –