Domanda

Voglio inviare migliaia di messaggi di posta elettronica diversi per diversi destinatari e vorrebbe aprire la connessione alla mia SMTP e tenerlo. Spero che questo è più veloce quindi riaprire la connessione per la posta Ervy. Vorrei utilizzare Apache Commons-mail per questo, ma potrebbe ripiegare alla API Java posta, se necessario.

In questo momento I'am fare questo, ciò che apre un chiude la connessione ogni volta:

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();
È stato utile?

Soluzione

Qui è la mia classe di test delle prestazioni. L'invio delle mail utilizzando la connessione uno è 4 volte più veloce quindi riaprire la connessione ogni volta (cosa succede quando si utilizza Commons mail). Le prestazioni possono essere spinta ulteriormente utilizzando più thread.

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

Altri suggerimenti

È possibile utilizzare il codice di prima, ma aggiungere la seguente per ottenere il sottostante sessione

email.getMailSession();

È possibile aggiungere ulteriori proprietà java posta da

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

Date un'occhiata al http: //java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html. C'è un esempio che mostra come inviare una e-mail. Dovreste essere in grado di inviare più prima di chiamare close () relativa al trasporto.

alcun codice necessario xtra a tutti, basta mettere tutti i vostri destinatari di posta elettronica e separare con una virgola.

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

e fare la stessa cosa per  Message.RecipientType.CC  e Message.RecipientType.BCC  se non v'è più di 1 destinatari di posta elettronica la speranza il suo aiuto:) ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top