je veux envoyer un email en utilisant gmail comme serveur smtp.
c'est mon code, et je ne le fais pas fonctionner ... après avoir exécuté testSettings (), j'obtiens la sortie de débogage, puis elle s'arrête. pas de timeout, pas d'erreur, rien ....
public void testSettings() {
final String username = Settings.get("benutzername");
final String password = Settings.get("passwort");
Properties props = new Properties();
props.put("mail.transport.protocol", "smtps");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.socketFactory.port", Settings.get("port"));
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.Host", Settings.get("server"));
props.put("mail.smtp.port", Settings.get("port"));
props.put("mail.smtp.timeout", "10000");
props.put("mail.smtp.ssl.checkserveridentity", "false");
props.put("mail.smtp.ssl.trust", "*");
props.put("mail.smtp.connectiontimeout", "10000");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("[email protected]"));
message.setSubject("Testing Subject");
message.setText("test");
Transport transport = session.getTransport("smtps");
transport.send(message);
// Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
// throw new RuntimeException(e);
}
}
DEBUG: setDebug: JavaMail version 1.4.7
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.Sun.mail.smtp.SMTPSSLTransport,Oracle]
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to Host "smtp.gmail.com", port 587, isSSL false
L'erreur suivante se produit: http://pastie.org/private/rkoknss6ppiufjd9swqta
Au lieu de
props.put ("mail.transport.protocol", "smtps");
Transport transport = session.getTransport ("smtps");
Utilisation
props.put ("mail.transport.protocol", "smtp");
Transport transport = session.getTransport ("smtp");
Utilisez smtp, pas smtps
J'ai utilisé JDK 8, Netbeans 8, JavaMail 1.5.2 et cet exemple fonctionne très bien:
public static void main(String[] args) {
Properties props = new Properties();
props.put("mail.smtp.Host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]","password");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("[email protected]"));
message.setSubject("Testing Subject");
message.setText("Test Mail");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
Si vous ne parvenez pas à vous connecter avec le port 465, essayez le port 587
De la lecture de ceci: http://www.Oracle.com/technetwork/Java/javamail/faq-135477.html#commonmistakes
L'utilisation de
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");**
et
props.put("mail.smtp.socketFactory.port", "465");
est un peu dépassé. Pour simplifier le code, utilisez:
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.ssl.enable", "true");
Si vous utilisez Windows et que vous avez un antivirus ou un pare-feu, désactivez-le et essayez.
Mon problème était dans le nom de l'ordinateur, il contenait des symboles cyrilliques. Pour comprendre la raison de votre problème, ajoutez
props.put("mail.debug", "true");
Voir aussi le code de travail ici