Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaMail not sending SMTP email via postfix

I am trying to set up JavaMail to send and receive emails using Postfix, which is installed on my CentOS7 development box. I have confirmed that postfix is able to display received emails by typing MAIL=/home/root/Maildir into the terminal, followed by return and then mail, 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 CentOS 7 terminal, there are no new emails after I run my Javamail code as described below. How can I get Javamail to send smtp email?

Here is my class:

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  

I call the class as follows:

TestEmail em = new TestEmail();
em.send();

The eclipse console produces the following logs when the above code is run:

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:<username@localhost>
250 2.1.0 Ok
RCPT TO:<root@localhost>
250 2.1.5 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   root@localhost
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Mon, 5 Jan 2015 13:12:02 -0800 (PST)
From: username@localhost
To: root@localhost
Message-ID: <1738078707.0.1420492322780.JavaMail.username@localhost.localdomain>
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
like image 985
CodeMed Avatar asked Jan 05 '15 21:01

CodeMed


People also ask

How to send email from Java application using SMTP?

As we discussed in earlier tutorials that SMTP server is responsible for sending emails so we need SMTP server to send email from our java application. Install and use any SMTP server such as Postfix server, Apache James server etc. Use the SMTP server provided by the host provider.

Does JavaMail support TLS and SSL authentication?

JavaMail API supports both TLS and SSL authentication for sending emails. Today we will learn how to use JavaMail API to send emails using SMTP server with no authentication, TLS and SSL authentication and how to send attachments and attach and use images in the email body.

How to configure SMTP server to send email without authentication?

If the SMTP server is not running on default port (25), then you will also need to set mail.smtp.port property. Just run this program with your no-authentication SMTP server and by setting recipient email id as your own email id and you will get the email in no time.

What is Postfix mail transfer?

Postfix is a mail transfer agent (MTA), an application used to send and receive email. In this tutorial, we will… Thanks for contributing an answer to Server Fault! Please be sure to answer the question.


1 Answers

from the log Ok: queued as DB1249A618 the mail is correctly recived by SMTP server. so problem may be misconfigured server (maybe an antispam filter) or wrong mail address.

Look here https://serverfault.com/questions/485505/get-postfix-to-forward-roots-mail to check your server configuration is right.

like image 135
Lesto Avatar answered Oct 08 '22 10:10

Lesto