0

メールサービスに接続および切断せずにこのループを適用する方法はありますか? ループは 2 人または 5 人で問題なく機能していますが、100 人になるとすべてのメッセージを送信するのに時間がかかります。各ループで約 3 秒かかります。

     while(rs.next()){
     items = rs.getString("email");          



    try {

        Properties mail = new Properties();
        mail.setProperty("mail.smtp.host", "smtp.gmail.com");
        mail.setProperty("mail.smtp.starttls.enable","true");
        mail.setProperty("mail.smtp.port", "25");
        mail.setProperty("mail.smtp.user", "cuatrocuadrado@gmail.com" );
        mail.setProperty("mail.smtp.auth", "true");


         session=Session.getDefaultInstance(mail);
       message= new MimeMessage(session);
         message.setFrom(new InternetAddress("cuatrocuadrado@gmail.com"));
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(items));
        //message.addRecipient(Message.RecipientType.BCC, new InternetAddress());
        message.setSubject(Email.tSubject.getText());
        message.setText(Email.areaEmail.getText());

         Transport t = session.getTransport("smtp");
        t.connect("cuatrocuadrado@gmail.com","*********");

        t.sendMessage(message, message.getAllRecipients());

        t.close();

        } catch (MessagingException ex) {
        JOptionPane.showMessageDialog(null,ex.getMessage());
    }
} }  catch (SQLException ex) {
        Logger.getLogger(SendEmail.class.getName()).log(Level.SEVERE, null, ex);
    }JOptionPane.showMessageDialog(null,"Success");
4

2 に答える 2

0

これを試してみてください。

結果セットから電子メールの値を取得し、配列に動的に追加します。

String[] to = {"test1@gmail.com","test2@gmail.com","test3@gmail.com","test4@gmail.com"};
InternetAddress[] addressTo = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++)
{
    addressTo[i] = new InternetAddress(to[i]);
}
msg.setRecipients(RecipientType.TO, addressTo); 
于 2013-01-29T19:17:56.007 に答える
0

これを試してみてください。ただし、別の問題に直面することになります。サーバーの NS エントリがない場合、gmail では複数の受信者に送信できません。アマゾンやその他のクラウド サービスがある場合は、それらを使用できますが、料金がかかります :P

try {

    Properties mail = new Properties();
    mail.setProperty("mail.smtp.host", "smtp.gmail.com");
    mail.setProperty("mail.smtp.starttls.enable","true");
    mail.setProperty("mail.smtp.port", "25");
    mail.setProperty("mail.smtp.user", "cuatrocuadrado@gmail.com" );
    mail.setProperty("mail.smtp.auth", "true");


    session=Session.getDefaultInstance(mail);
    message= new MimeMessage(session);
    message.setFrom(new InternetAddress("cuatrocuadrado@gmail.com"));

    ArrayList<InternetAddress> many = new ArrayList<InternetAddress>();
    while(rs.next()){
        many.add(new InternetAddress(rs.getString("email")));    
    }
    message.addRecipient(Message.RecipientType.TO, many.toArray(new InternetAddress[many.length]));
    //message.addRecipient(Message.RecipientType.BCC, new InternetAddress());
    message.setSubject(Email.tSubject.getText());
    message.setText(Email.areaEmail.getText());

    Transport t = session.getTransport("smtp");
    t.connect("cuatrocuadrado@gmail.com","*********");

    t.sendMessage(message, message.getAllRecipients());

    t.close();

}catch (MessagingException ex) {
    JOptionPane.showMessageDialog(null,ex.getMessage());
}catch (SQLException ex) {
    Logger.getLogger(SendEmail.class.getName()).log(Level.SEVERE, null, ex);
}
于 2013-01-29T19:25:27.600 に答える