web-dev-qa-db-fra.com

Doit d'abord émettre une commande STARTTLS

J'exécute cet exemple simple avec mon compte Gmail, mais cela ne fonctionne pas et donne l'erreur suivante:

      send failed, exception: com.Sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. nv2sm4478384pbb.6      

Voici mon code

   public class Email
{
   public static void main(String [] args)
   {

       Properties props = new Properties();
        props.put("mail.smtp.Host", "smtp.googlemail.com");
        props.put("mail.from", "[email protected]");
          Session session = Session.getInstance(props, null);

        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom();
            msg.setRecipients(Message.RecipientType.TO,
                              "[email protected]");
            msg.setSubject("JavaMail hello world example");
            msg.setSentDate(new Date());
            msg.setText("Hello, world!\n");
            Transport.send(msg);
        } catch (MessagingException mex) {
            System.out.println("send failed, exception: " + mex);
        }
   }
}
25
user1226162

Vous essayez probablement d'utiliser les serveurs de Gmail sur le port 25 pour remettre du courrier à un tiers via une connexion non authentifiée. Gmail ne vous permet pas de le faire, car alors quiconque pourrait utiliser les serveurs de Gmail pour envoyer des messages à quiconque. Ceci s'appelle un relais ouvert et était un catalyseur commun du spam dans les premiers jours. Les relais ouverts ne sont plus acceptés sur Internet.

Vous devrez demander à votre client SMTP de se connecter à Gmail en utilisant une connexion authentifiée, probablement sur le port 587 .

30
Greg Hewgill

le port smtp et socketFactory doivent être changés 

    String to = "[email protected]";
    String subject = "subject"
    String msg ="email text...."
    final String from ="[email protected]"
    final  String password ="senderPassword"


    Properties props = new Properties();  
    props.setProperty("mail.transport.protocol", "smtp");     
    props.setProperty("mail.Host", "smtp.gmail.com");  
    props.put("mail.smtp.auth", "true");  
    props.put("mail.smtp.port", "465");  
    props.put("mail.debug", "true");  
    props.put("mail.smtp.socketFactory.port", "465");  
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");  
    props.put("mail.smtp.socketFactory.fallback", "false");  
    Session session = Session.getDefaultInstance(props,  
    new javax.mail.Authenticator() {
       protected PasswordAuthentication getPasswordAuthentication() {  
       return new PasswordAuthentication(from,password);  
   }  
   });  

   //session.setDebug(true);  
   Transport transport = session.getTransport();  
   InternetAddress addressFrom = new InternetAddress(from);  

   MimeMessage message = new MimeMessage(session);  
   message.setSender(addressFrom);  
   message.setSubject(subject);  
   message.setContent(msg, "text/plain");  
   message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));  

   transport.connect();  
   Transport.send(message);  
   transport.close();
   }  

espérons que cela fonctionnera pour vous ..

14
Pradeep Maurya

Ajouter

props.put("mail.smtp.starttls.enable", "true");

résolu mon problème;)

Mon problème était:

com.Sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Doit d'abord émettre une commande STARTTLS. u186sm7971862pfu.82 - gsmtp

at com.Sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.Java:2108)
at com.Sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.Java:1609)
at com.Sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.Java:1117)
at javax.mail.Transport.send0(Transport.Java:195)
at javax.mail.Transport.send(Transport.Java:124)
at com.example.sendmail.SendEmailExample2.main(SendEmailExample2.Java:53)
6
Vasudeva Krishnan

J'ai également rencontré le même problème pendant que je construisais une application de notification par courrier électronique. il vous suffit d'ajouter une ligne. En dessous, on a sauvé ma journée.

props.put("mail.smtp.starttls.enable", "true");

com.Sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Doit d'abord émettre une commande STARTTLS. h13-v6sm10627790pgp.13 - gsmtp

at com.Sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.Java:2108)
at com.Sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.Java:1609)
at com.Sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.Java:1117)
at javax.mail.Transport.send0(Transport.Java:195)
at javax.mail.Transport.send(Transport.Java:124)
at com.smruti.email.EmailProject.EmailSend.main(EmailSend.Java:99)

J'espère que cela vous aide.

1
PyDevSRS

Essayez ce code:

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.prot", "465");

                        Session session = Session.getDefaultInstance(props,
                                new javax.mail.Authenticator() {
                            protected PasswordAuthentication getPasswordAuthentication() {

                                return new PasswordAuthentication("PUT THE MAIL SENDER HERE !", "PUT THE PASSWORD OF THE MAIL SENDER HERE !");
                            }
                        }
                        );
                        try {
                            Message message = new MimeMessage(session);
                            message.setFrom(new InternetAddress("PUT THE MAIL SENDER HERE !"));
                            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("PUT THE MAIL RECEIVER HERE !"));
                            message.setSubject("MAIL SUBJECT !");
                            message.setText("MAIL BODY !");
                            Transport.send(message);

                        } catch (Exception e) {
                            JOptionPane.showMessageDialog(null, e);
                        }

Vous devez moins sécuriser la sécurité de l'expéditeur du courrier. si le problème persiste, je pense que cela peut être causé par l'antivirus, essayez de le désactiver ..

0
Haddad