52 Stimmen

Verwendung von JavaMail mit TLS

Ich habe auf SO mehrere andere Fragen zur JavaMail-API und zum Versand von E-Mails über einen SMTP-Server gefunden, aber in keiner davon wurde die Verwendung von TLS-Sicherheit diskutiert. Ich versuche, JavaMail zu verwenden, um Status-Updates an mich selbst über meinen SMTP-Mailserver auf der Arbeit zu senden, aber das erfordert TLS, und ich kann online keine Beispiele dafür finden, wie man JavaMail verwendet, um auf einen SMTP-Server zuzugreifen, der TLS-Verschlüsselung erfordert. Kann mir jemand dabei helfen?

2voto

Benny Bottema Punkte 10255

Mit Simple Java Mail 5.0.0 (simplejavamail.org) ist es sehr einfach und die Bibliothek kümmert sich um alle Session-Eigenschaften für Sie.

Hier ist ein Beispiel, das die SMTP-Server von Google verwendet:

Email email = EmailBuilder.startingBlank()
        .from("lollypop", "lol.pop@somemail.com")
        .to("C.Cane", "candycane@candyshop.org")
        .withSubject("hey")
        .withPlainText("We should meet up!")
        .withHTMLText("<b>We should meet up!</b>")
        .buildEmail();

MailerBuilder.withSMTPServer("smtp.gmail.com", 25, "user", "pass", SMTP_TLS)
        .buildMailer()
        .sendMail(email);

MailerBuilder.withSMTPServer("smtp.gmail.com", 587, "user", "pass", SMTP_TLS)
        .buildMailer()
        .sendMail(email);

MailerBuilder.withSMTPServer("smtp.gmail.com", 465, "user", "pass", SMTP_SSL)
        .buildMailer()
        .sendMail(email);

Wenn Sie die Zwei-Faktor-Anmeldung aktiviert haben, müssen Sie eine anwendungsspezifisches Passwort über Ihr Google-Konto.

2voto

Evgeniy Noskov Punkte 11

Als kleine Anmerkung: Bei mir funktionierte es erst, als ich in den obigen Beispielen smtp in smtps änderte (siehe smtpsend.java), https://github.com/javaee/javamail/releases/download/JAVAMAIL-1_6_2/javamail-samples.zip , Option -S).

Mein daraus resultierender Code sieht wie folgt aus:

Properties props=new Properties();
props.put("mail.smtps.starttls.enable","true");
// Use the following if you need SSL
props.put("mail.smtps.socketFactory.port", port);
props.put("mail.smtps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtps.socketFactory.fallback", "false");
props.put("mail.smtps.host", serverList.get(randNum));
Session session = Session.getDefaultInstance(props);

smtpConnectionPool = new SmtpConnectionPool(
    SmtpConnectionFactories.newSmtpFactory(session));

final ClosableSmtpConnection transport = smtpConnectionPool.borrowObject();
...
transport.sendMessage(message, message.getAllRecipients());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X