2016-11-04 75 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

うれしかったよ! –