2015-12-25 1 views
0

Je travaille sur Java Spring, Maven et j'essaie d'envoyer un mail sur gmail, en utilisant un identifiant gmail. Je reçois cette erreur:Doit exécuter une commande STARTTLS en premier. mail.smtp.EnableSSL.enable déjà défini sur true

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. 11sm885884pfp.38 - gsmtp 

même à travers je mets le paramètre

mail.smtp.starttls.enable 

true.

C'est ma fonction:

public String sendMail(String to, String subject, String textMessage) throws IOException { 
    Properties props = new Properties(); 
    props.put("mail.transport.protocol", "smtp"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.auth", "true"); 
    Session mailSession = Session.getInstance(props); 
    mailSession.setDebug(true); 
    Message simpleMessage = new MimeMessage(mailSession); 

    InternetAddress fromAddress = [email protected]; 
    InternetAddress toAddress = null; 
    try { 
     toAddress = new InternetAddress(to); 
    } catch (AddressException e) { 
     System.out.print("\nError in Address of Sender or reciever\n"); 
     e.printStackTrace(); 
    } 
    try { 
     simpleMessage.setFrom(fromAddress); 
     simpleMessage.setRecipient(RecipientType.TO, toAddress); 
     simpleMessage.setSubject(subject); 
     simpleMessage.setText(textMessage); 
     SMTPTransport t = (SMTPTransport) mailSession.getTransport("smtp"); 
     t.setStartTLS(true); 
     t.connect("smtp.gmail.com", "[email protected]", "from.password!"); 
     t.sendMessage(simpleMessage, simpleMessage.getAllRecipients()); 
     t.close(); 

    } catch (MessagingException e) {    
     System.out.print("\nError in message Genration\n"); 
     e.printStackTrace(); 
    } 
    return "success"; 
} 

Toutes les réponses sur SO nous dire de mettre mail.smtp.starttls.enable à true. Faire cela ne fonctionne même pas.

J'ai également inclus la dépendance javax.mail dans mon pom comme:

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>1.4</version> 
</dependency> 

Répondre

0

Lorsque vous utilisez le printemps, il est préférable d'intégrer leurs abstractions au lieu de javax.mail API de bas niveau. En fait, vous pouvez utiliser JavaMailSender et son implémentation, JavaMailSenderImpl, pour obtenir le même résultat. Voir this pour un exemple.