title: Must issue a STARTTLS command first java
body: <p>I am using JavaMail and smtp (gmail), here's my code :</p>
  
  <pre><code>import java.util.Properties;    
  import javax.mail.Message;
  import javax.mail.MessagingException;
  import javax.mail.Session;
  import javax.mail.Transport;
  import javax.mail.internet.AddressException;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeMessage;
  
  public class Email {    
      Properties emailProperties;
      Session mailSession;
      MimeMessage emailMessage;
  
      public static void main(String args[]) throws AddressException,
              MessagingException {
  
          Email javaEmail = new Email();
  
          javaEmail.setMailServerProperties();
          javaEmail.createEmailMessage();
          javaEmail.sendEmail();
      }
  
      public void setMailServerProperties() {
  
          String emailPort = "587";//gmail's smtp port
  
          emailProperties = System.getProperties();
          emailProperties.put("mail.smtp.port", emailPort);
          emailProperties.put("mail.smtp.auth", "true");
          emailProperties.put("mail.smtp.starttls.enable", "true");
  
      }
  
      public void createEmailMessage() throws AddressException,
              MessagingException {
          String[] toEmails = { "to@gmail.com" };
          String emailSubject = "Java Email";
          String emailBody = "This is an email sent by JavaMail api.";
  
          mailSession = Session.getDefaultInstance(emailProperties, null);
          emailMessage = new MimeMessage(mailSession);
  
          for (int i = 0; i &lt; toEmails.length; i++) {
              emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
          }
  
          emailMessage.setSubject(emailSubject);
          emailMessage.setContent(emailBody, "text/html");//for a html email
          //emailMessage.setText(emailBody);// for a text email
  
      }
  
      public void sendEmail() throws AddressException, MessagingException {
  
          String emailHost = "smtp.gmail.com";
          String fromUser = "yourusername";//just the id alone without @gmail.com
          String fromUserEmailPassword = "your_password";
  
          Transport transport = mailSession.getTransport("smtp");
  
          transport.connect(emailHost, fromUser, fromUserEmailPassword);
          transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
          transport.close();
          System.out.println("Email sent successfully.");
      }
  
  }
  </code></pre>
  
  <p>Error Message :</p>
  
  <pre><code>Exception in thread "main" javax.mail.MessagingException: 530 5.7.0
  Must issue a STARTTLS command first. n80sm23847952pfi.25 - gsmtp
      at
  com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1020)
      at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:716)
      at
  com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:388)
      at com.mail.Email.sendEmail(Email.java:68)  at
  com.mail.Email.main(Email.java:26)
  </code></pre>