Question

Je veux envoyer des milliers de courriels à des destinataires différents et souhaite ouvrir la connexion à mon SMTP et le maintenir. J'espère que cela est plus rapide puis rouvrez la connexion pour le courrier Ervy. Je voudrais utiliser Apache Commons Email pour cela, mais pourrait revenir à l'API Java courrier si nécessaire.

En ce moment I'am faire, ce qui ouvre un ferme la connexion à chaque fois:

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();
Était-ce utile?

La solution

Voici ma classe de test de performance. L'envoi des mails en utilisant la connexion est une 4 fois rouvrent plus vite que la connexion à chaque fois (ce qui se passe lorsque vous utilisez courrier commun). La performance peut être poussé plus loin à l'aide de plusieurs threads.

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

Autres conseils

Vous pouvez utiliser votre code plus tôt, mais ajouter ce qui suit pour obtenir la session sous-jacente

email.getMailSession();

Vous pouvez ajouter des propriétés supplémentaires de messagerie java par

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

Jetez un oeil à http: //java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html. Il est un exemple montrant comment envoyer un email. Vous devriez être en mesure d'envoyer plus avant d'appeler close () sur le transport.

pas de code besoin xtra du tout, il suffit de mettre vos tous les destinataires de courrier électronique et séparées par des virgules.

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

et faire la même chose pour  Message.RecipientType.CC  et Message.RecipientType.BCC  s'il y a plus de 1 destinataires de courrier électronique espère son aide:) ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top