8
votes

Comment envoyer plusieurs courriels en une session?

Je veux envoyer des milliers de courriels différents à différents destinataires et souhaiterions ouvrir la connexion à mon SMTP et le tenir. J'espère que cela est plus rapide, puis rouvrez la connexion pour Uervy Mail. J'aimerais utiliser l'e-mail Apache Commons pour cela, mais je pourrais revenir à l'API de la messagerie Java si nécessaire.

À l'heure actuelle, je fais cela, ce qui s'ouvre sur la connexion à chaque fois: P>

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


3 commentaires

Gardez la session ouverte et envoyez 1000 emails et enfin Fermer la session.


Savez-vous si cela est possible avec le courrier électronique des Commons?


Il ne semble pas que ça ... j'utilise JavaMail Full-Out.


3 Réponses :


1
votes

regarder http: //java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html . Il y a un exemple montrant comment envoyer un email. Vous devriez être capable d'envoyer plus avant d'appeler Fermer () sur le transport.


0 commentaires

18
votes

Voici ma classe de test de performance. L'envoi des mails à l'aide d'une connexion est 4 fois plus rapide puis rouvrez la connexion à chaque fois (que se passe-t-il lorsque vous utilisez la messagerie Common). Les performances peuvent être poussées davantage en utilisant 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();


0 commentaires

3
votes

Vous pouvez utiliser votre code précédent, mais ajouter les éléments suivants pour obtenir la session sous-jacente xxx pré>

Vous pouvez ajouter des propriétés de messagerie Java supplémentaires par P>

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


0 commentaires