title: Gmail Api in spring boot : javax.mail.MessagingException: Could not convert socket to TLS
body: <p>I'm working with spring-boot in back end , i tried to send an email to a gmail account using smtp but i'm fascing some errors .</p>
  
  <p>Here is my code following this <a href="http://www.baeldung.com/spring-email" rel="nofollow noreferrer">tutorial</a> :</p>
  
  <p>application.properties : </p>
  
  <pre><code>spring.mail.host=smtp.gmail.com
  spring.mail.port=587
  spring.mail.username=xxx@gmail.com
  spring.mail.password=xxxpwd
  spring.mail.properties.mail.smtp.auth=true
  spring.mail.properties.mail.smtp.starttls.enable=true
  </code></pre>
  
  <p>Class MailObject.java :</p>
  
  <pre><code>    package interv.Web.Notifications;
  
  import org.hibernate.validator.constraints.Email;
  
  import javax.validation.constraints.NotNull;
  import javax.validation.constraints.Size;
  
  public class MailObject {
  
      @Email
      @NotNull
      @Size(min = 1, message = "Please, set an email address to send the message to it")
      private String to;
      private String subject;
      private String text;
  
      public String getTo() {
          return to;
      }
  
      public void setTo(String to) {
          this.to = to;
      }
  
      public String getSubject() {
          return subject;
      }
  
      public void setSubject(String subject) {
          this.subject = subject;
      }
  
      public String getText() {
          return text;
      }
  
      public void setText(String text) {
          this.text = text;
      }
  }
  </code></pre>
  
  <p>MailController.java : </p>
  
  <pre><code>    @Controller
  public class MailController {
  
      @Autowired
      public EmailServiceImpl emailService;
  
      @Autowired
      public SimpleMailMessage template;
  
      @RequestMapping(value = "/send", method = RequestMethod.POST)
      public String createMail(@RequestBody MailObject mailObject) {
  
  
          emailService.sendSimpleMessage(mailObject.getTo(),
                  mailObject.getSubject(), mailObject.getText());
  
          return "that was succesfull";
  
      }
  }
  </code></pre>
  
  <p>EmailService.java</p>
  
  <pre><code>public interface EmailService {
  
      void sendSimpleMessage(String to,
                             String subject,
                             String text);
      void sendSimpleMessageUsingTemplate(String to,
                                          String subject,
                                          SimpleMailMessage template,
                                          String templateArgs);
  
  }
  </code></pre>
  
  <p>EmailServiceImpl.java</p>
  
  <pre><code>@Component
  public class EmailServiceImpl implements EmailService{
  
      @Autowired
      public JavaMailSender emailSender;
  
      @Override
      public void sendSimpleMessage(String to, String subject, String text) {
          SimpleMailMessage message = new SimpleMailMessage();
          message.setTo(to);
          message.setSubject(subject);
          message.setText(text);
  
          emailSender.send(message);
      }
  
      @Override
      public void sendSimpleMessageUsingTemplate(String to, String subject, SimpleMailMessage template, String templateArgs) {
          String text = String.format(template.getText(), templateArgs);
          sendSimpleMessage(to, subject, text);
      }
  }
  </code></pre>
  
  <p>While running i get no errors in console , but when i try to send an email i get this error : </p>
  
  <pre><code>servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
      javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. Failed messages: javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
      javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; message exceptions (1) are:
  Failed message 1: javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
      javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] with root cause
  
  sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
      at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) ~[na:1.8.0_161]
      at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) ~[na:1.8.0_161]
      at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) ~[na:1.8.0_161]
  </code></pre>
  
  <p>I don't understand why i'm getting this error : any idea ? </p>