Error sending mail using Java

My code:

// File Name

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
   public static void main(String [] args)

      // Recipient email ID needs to be mentioned.
      String to = "";

      // Sender email ID needs to be mentioned
      String from = "";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {


My program was working correctly last night; I could send email from any address to any other, but now this error happens:

javax.mail.SendFailedException: Sending failed;
  nested exception is:
    class javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
  nested exception is: Connection refused
    at javax.mail.Transport.send0(
    at javax.mail.Transport.send(
    at SendEmail.main(


Line 49:



Can anyone help me fix this error?

My operating system: Linux, Fedora 16-kernel: 3.3.7


source to share

3 answers

Failed to connect to SMTP host: localhost, port: 25;

SMTP should not work on your system, or disabled for you as a user. Contact your system administrator and enable it.

To check if SMTP is working on your Linux system, try the following commands:

  • To check that Sendmail is running, try: netstat -an | grep 25

  • Use telnet to connect to port 25 of the smtp server: telnet <yourhost-or-ipnumber> 25

    a. Connecting to localhost ... Failed to open connection to host, on port 25: connection failed.
    b. if you or your ip is blocked, you will see an error message like this:
       220-localhost ESMTP Exim 4.63 # 1 Fri, 01 Jun 2012 19:35:30 +0530
       220 - We do not allow the use of this system for transporting unsolicited and / or bulk e-mail messages.
  • echo -e "quit" | nc localhost 25

    localhost.localdomain [] 25 (?): Connection refused
  • mail at a shell prompt.
  • and maybe more ...

You must make sure that the daemon is sendmail

running and always available.

And if you have access to any other SMTP servers, try sending mail using the SMTP hostname to check if your snippet works.
Example:String host = "";



it happened because my SendMail service stopped working.

to enable it: try this command in a shell (as root).

service sendmail start




U on the right track. Just change property setting and session suggestion .my java mail work Fine ...

final String username = "";
            final String password = "****";

            Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable", "true");
            props.put("", "");
            props.put("mail.smtp.port", "587");

            Session session = Session.getInstance(props, new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);




All Articles