Wie mehrere E-Mails in einer Sitzung schicken?
-
30-09-2019 - |
Frage
Ich möchte Tausende von verschiedenen E-Mails an verschiedene Empfänger senden und möchte die Verbindung zu meinem SMTP öffnen und halten. Ich hoffe, dies ist schneller als die Verbindung für Ervy Mail erneut öffnen. Ich möchte Apache Commons E-Mail für das verwenden, könnte aber auf die Java-Mail-API zurückgreifen, wenn nötig.
Im Moment dieses Ich bin zu tun, was für eine schließt die Verbindung öffnet jedes Mal: ??
HtmlEmail email = new HtmlEmail();
email.setHostName(server.getHostName());
email.setSmtpPort(server.getPort());
email.setAuthenticator(new DefaultAuthenticator(server.getUsername(), server.getPassword()));
email.setTLS(true);
email.setFrom("test@example.com");
email.addTo(to);
email.setSubject(subject);
email.setHtmlMsg(htmlMsg);
email.send();
Lösung
Hier ist meine Performance-Test-Klasse. die Mails eine Verbindung mit 4-mal schneller als die Verbindung jedes Mal wieder öffnen (was passiert, wenn Sie commons Mail verwenden). Die Leistung kann weiter vorangetrieben werden von mehreren Threads verwendet wird.
Properties properties = System.getProperties();
properties.put("mail.smtp.host", server);
properties.put("mail.smtp.port", "" + port);
Session session = Session.getInstance(properties);
Transport transport = session.getTransport("smtp");
transport.connect(server, username, password);
for (int i = 0; i < count; i++) {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
message.setRecipients(Message.RecipientType.TO, address);
message.setSubject(subject + "JavaMail API");
message.setSentDate(new Date());
setHTMLContent(message);
message.saveChanges();
transport.sendMessage(message, address);
}
transport.close();
Andere Tipps
Sie können Ihren früheren Code verwenden, aber die folgende fügen Sie die zugrunde liegende Session
zu bekommenemail.getMailSession();
Sie können zusätzliche hinzufügen Java-Mail-Eigenschaften von
email.getMailSession().getProperties().put(<key>, <value>);
Hier finden Sie aktuelle http: //java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html . Es ist ein Beispiel dafür, wie eine E-Mail zu senden. Sie sollten () auf dem Transport vor dem Aufruf der Nähe der Lage sein, mehr zu senden.
keine Notwendigkeit xtra-Code überhaupt, nur setzen Sie Ihre alle E-Mail-Empfänger und trennen mit Komma.
MimeMessage pesan = new MimeMessage(session);
pesan.setFrom(new InternetAddress("email_from@host.com"));
pesan.setRecipients(Message.RecipientType.TO, InternetAddress.parseHeader("first_email@host.com,second_email@host.com,dst_email@host.com",false));
und das gleiche tun für
Message.RecipientType.CC
und Message.RecipientType.BCC
wenn es mehr als 1 E-Mail-Empfänger
hoffen, seine Hilfe:) ..