Pregunta

Quiero enviar miles de mensajes de correo electrónico diferentes para diferentes destinatarios y le gustaría abrir la conexión a mi SMTP y sostenerlo. Espero que esto es más rápido vuelva a abrir la conexión para el correo Ervy. Me gustaría utilizar Apache Commons correo electrónico para eso, pero podría caer de nuevo a la API de Java Mail si es necesario.

En este momento I'am haciendo esto, lo que abre una cierra la conexión cada vez que:

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();
¿Fue útil?

Solución

Esta es mi clase de prueba de rendimiento. El envío de los correos electrónicos que utilizan la conexión es 4 veces más rápido vuelva a abrir la conexión cada vez (lo que sucede cuando se utiliza Commons electrónico). El rendimiento puede ser empujado aún más mediante el uso de múltiples hilos.

    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();

Otros consejos

Puede utilizar el código anterior, pero agrega la siguiente para obtener el subyacente Sesión

email.getMailSession();

Puede agregar propiedades electrónico java adicionales por

email.getMailSession().getProperties().put(<key>, <value>);

Para consultar http: //java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html. Hay un ejemplo que muestra cómo enviar un correo electrónico. Usted debe ser capaz de enviar más antes de llamar a close () en el transporte.

sin necesidad de código Xtra en absoluto, sólo hay que poner sus todos los destinatarios de correo electrónico y separar con comas.

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));

y hacer lo mismo para  Message.RecipientType.CC  y Message.RecipientType.BCC  si hay más de 1 destinatarios de correo electrónico espero su ayuda:) ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top