title: JavaMail not sending SMTP email via postfix
body: <p>I am trying to set up <code>JavaMail</code> to send and receive emails using <code>Postfix</code>, which is installed on my <code>CentOS7</code> development box.  I have confirmed that <code>postfix</code> is able to display received emails by typing <code>MAIL=/home/root/Maildir</code> into the terminal, followed by return and then <code>mail</code>, which lists all received emails for the user account.  But yet when I log in as root and check to see the received emails in the <code>CentOS 7 terminal</code>, there are no new emails after I run my <code>Javamail</code> code as described below.  <strong>How can I get <code>Javamail</code> to send smtp email?</strong>  </p>
  
  <p>Here is my class:  </p>
  
  <pre><code>import java.util.*;
  import javax.mail.*;
  import javax.mail.internet.*;
  import javax.activation.*;
  
  //Send a simple, single part, text/plain e-mail
  public class TestEmail {
  
    public void send(){
       // SUBSTITUTE YOUR EMAIL ADDRESSES HERE!
       String to = "root@localhost";
       String from = "username@localhost";
       // SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!
       String host = "localhost";
  
       // Create properties, get Session
       Properties props = new Properties();
  
       //http://docs.oracle.com/javaee/6/api/javax/mail/Session.html
       // If using static Transport.send(),
       // need to specify which host to send it to
       props.put("mail.smtp.host", host);
       // To see what is going on behind the scene
       props.put("mail.debug", "true");
       Session session = Session.getInstance(props);
  
       try {
           // Instantiate a message
           Message msg = new MimeMessage(session);
  
           //Set message attributes
           msg.setFrom(new InternetAddress(from));
           InternetAddress[] address = {new InternetAddress(to)};
           msg.setRecipients(Message.RecipientType.TO, address);
           msg.setSubject("A new record was just added.");
           msg.setSentDate(new Date());
  
           // Set message content
           msg.setText("This is a test of sending a " +
                       "plain text e-mail through Java.\n" +
                       "Here is line 2.");
  
           //Send the message
           Transport.send(msg);
       }
       catch (MessagingException mex) {
           // Prints all nested (chained) exceptions as well
           mex.printStackTrace();
       }
   }
  }//End of class  
  </code></pre>
  
  <p>I call the class as follows:  </p>
  
  <pre><code>TestEmail em = new TestEmail();
  em.send();
  </code></pre>
  
  <p>The eclipse console produces the following logs when the above code is run:  </p>
  
  <pre><code>DEBUG: JavaMail version 1.5.0-b01
  DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
  DEBUG: Tables of loaded providers
  DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
  DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
  DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
  DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
  DEBUG SMTP: useEhlo true, useAuth false
  DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false
  220 localhost.localdomain ESMTP Postfix
  DEBUG SMTP: connected to host "localhost", port: 25
  
  EHLO localhost.localdomain
  250-localhost.localdomain
  250-PIPELINING
  250-SIZE 10240000
  250-VRFY
  250-ETRN
  250-ENHANCEDSTATUSCODES
  250-8BITMIME
  250 DSN
  DEBUG SMTP: Found extension "PIPELINING", arg ""
  DEBUG SMTP: Found extension "SIZE", arg "10240000"
  DEBUG SMTP: Found extension "VRFY", arg ""
  DEBUG SMTP: Found extension "ETRN", arg ""
  DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
  DEBUG SMTP: Found extension "8BITMIME", arg ""
  DEBUG SMTP: Found extension "DSN", arg ""
  DEBUG SMTP: use8bit false
  MAIL FROM:&lt;username@localhost&gt;
  250 2.1.0 Ok
  RCPT TO:&lt;root@localhost&gt;
  250 2.1.5 Ok
  DEBUG SMTP: Verified Addresses
  DEBUG SMTP:   root@localhost
  DATA
  354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
  Date: Mon, 5 Jan 2015 13:12:02 -0800 (PST)
  From: username@localhost
  To: root@localhost
  Message-ID: &lt;1738078707.0.1420492322780.JavaMail.username@localhost.localdomain&gt;
  Subject: A new record was just added.
  MIME-Version: 1.0
  Content-Type: text/plain; charset=us-ascii
  Content-Transfer-Encoding: 7bit
  
  This is a test of sending a plain text e-mail through Java.
  Here is line 2.
  .
  250 2.0.0 Ok: queued as DB1249A618
  QUIT
  221 2.0.0 Bye
  sessionID is: 0816C244BDBAAD890D82138DC3801962
  </code></pre>