For troubleshooting help, please post your code.
public class MailSender implements Runnable {
private BlockingQueue<Map> queue;
Session mailSession;
/*... more stuff related to generation of content...*/
public MailSender(BlockingQueue<Map> queue, String smtp) {
this.queue = queue;
if(smtp.contains(":")) {
String[] smtpSplit = smtp.split(":");
smtpHost = smtpSplit[0];
smtpPort = Integer.parseInt(smtpSplit[1]);
} else {
smtpHost = smtp;
smtpPort = 25;
}
}
public void run() {
try {
while(true) {
Map t = queue.take(); //content data
if(t.containsKey(this.config.getString("POISON"))) break;
try {
Properties props = new Properties();
props.put("mail.smtp.allow8bitmime", "true");
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.port", ""+smtpPort );
props.put("mail.smtp.from", "(e-mail address removed)" );
props.put("mail.from", "(e-mail address removed)" );
mailSession = Session.getInstance(props);
SimpleEmail email = new SimpleEmail(); /* from apache.commons.mail */
email.setMailSession(mailSession);
email.setFrom("my@from");
email.addTo(t.get("email")+"");
email.setSubject("my subject");
email.setCharset("UTF-8");
String html = contentGenerator.getContent(t);
email.setContent(html,"text/html");
try {
email.send();
} catch (Exception e) {
System.out.println("send failed "+t);
e.printStackTrace(System.out);
}
} catch (Exception e) {
System.out.println("failed processing "+t);
e.printStackTrace(System.out);
}
}
} catch(InterruptedException e) {}
System.out.println("terminated");
} //end run
} //end class
In the main app, I create 50 threads sending to 8 SMTP servers.
taskQueue = new LinkedBlockingQueue<Map>(config.getInt("TASK_QUEUE"));
String[] smtp = config.getStringArray("SMTP_SERVERS");
Collections.shuffle(Arrays.asList(smtp));
for(int i=0;i<nThrsTasks;i++) {
new Thread(new MailSender(taskQueue,smtp[i%smtp.length])).start();
}
bart