Ich habe gerade ziemlich viel Zeit damit verbracht, herauszufinden, wie man JavaMail verwendet, um E-Mails mit gmail oder office365 zu versenden. Ich konnte die Antwort nicht finden in der faq aber wurde ein wenig durch die javadoc .
Wenn Sie vergessen props.put("mail.smtp.starttls.enable","true")
Sie erhalten com.sun.mail.smtp.SMTPSendFailedException: 451 5.7.3 STARTTLS is required to send mail
.
Wenn Sie vergessen props.put("mail.smtp.ssl.protocols", "TLSv1.2");
Sie erhalten javax.mail.MessagingException: Could not convert socket to TLS;
y No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
. Offenbar ist dies nur für JavaMail-Versionen 1.5.2 und älter notwendig.
Hier ist der minimale Code, den ich brauchte, um ihn zum Laufen zu bringen:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void main(String[] args) {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
// smtp.gmail.com supports TLSv1.2 and TLSv1.3
// smtp.office365.com supports only TLSv1.2
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
props.put("mail.smtp.host", "smtp.office365.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("test@example.com", "******");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("sender@example.com"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com"));
message.setSubject("You got mail");
message.setText("This email was sent with JavaMail.");
Transport.send(message);
System.out.println("Email sent.");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}