I am trying to write a code for sending a mail in JAVA..
And I am getting the error

javax.mail.MessagingException: Could not connect to SMTP host: mail.yahoo.com, port: 25;

What can my mistake possibly be..??
Please help me find my mistake..

Recommended Answers

All 15 Replies

Invalid SMTP address? Wrong port? Invalid user name? Invalid password? Check those things.

Beyond that you will probably have to post some code, since it's hard to see over your shoulder from here.

package learn;
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class maal {

    public static void main(String[] args) {

        // SUBSTITUTE YOUR EMAIL ADDRESSES HERE!!!
        String to = "shveetis@gmail.com";
        String from = "shveetis@yahoo.co.in";
        // SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!!!
        String host = "203.187.209.1";

        // Create properties for the Session
        Properties props = new Properties();

        // If using static Transport.send(),
        // need to specify the mail server here
        props.put("mail.smtp.host", host);
        // To see what is going on behind the scene
       // props.put("mail.debug", "true");

        // Get a session
        Session session = Session.getInstance(props);

        try {
            // Get a Transport object to send e-mail
            Transport bus = session.getTransport("smtp");

            // Connect only once here
            // Transport.send() disconnects after each send
            // Usually, no username and password is required for SMTP
            //bus.connect();
            bus.connect("mail.yahoo.com", "srathi1", "775916");

            // 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);
            // Parse a comma-separated list of email addresses. Be strict.
            msg.setRecipients(Message.RecipientType.CC,
                                InternetAddress.parse(to, true));
            // Parse comma/space-separated list. Cut some slack.
            msg.setRecipients(Message.RecipientType.BCC,
                                InternetAddress.parse(to, false));

            msg.setSubject("Test E-Mail through Java");
            msg.setSentDate(new Date());

            // Set message content and send
            setTextContent(msg);
            msg.saveChanges();
            bus.sendMessage(msg, address);

            setMultipartContent(msg);
            msg.saveChanges();
            bus.sendMessage(msg, address);

            setFileAsAttachment(msg, "C:/WINDOWS/CLOUD.GIF");
            msg.saveChanges();
            bus.sendMessage(msg, address);

            setHTMLContent(msg);
            msg.saveChanges();
            bus.sendMessage(msg, address);

            bus.close();

        }
        catch (MessagingException mex) {
            // Prints all nested (chained) exceptions as well
            mex.printStackTrace();
            // How to access nested exceptions
            while (mex.getNextException() != null) {
                // Get next exception in chain
                Exception ex = mex.getNextException();
                ex.printStackTrace();
                if (!(ex instanceof MessagingException)) break;
                else mex = (MessagingException)ex;
            }
        }
    }

    public static void setTextContent(Message msg) throws MessagingException {
            // Set message content
            String mytxt = "This is a test of sending a " +
                            "plain text e-mail through Java.\n" +
                            "Here is line 2.";
            msg.setText(mytxt);

            // Alternate form
            msg.setContent(mytxt, "text/plain");

    }

    public static void setMultipartContent(Message msg) throws MessagingException {
        // Create and fill first part
        MimeBodyPart p1 = new MimeBodyPart();
        p1.setText("This is part one of a test multipart e-mail.");

        // Create and fill second part
        MimeBodyPart p2 = new MimeBodyPart();
        // Here is how to set a charset on textual content
        p2.setText("This is the second part", "us-ascii");

        // Create the Multipart.  Add BodyParts to it.
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(p1);
        mp.addBodyPart(p2);

        // Set Multipart as the message's content
        msg.setContent(mp);
    }

    public static void setFileAsAttachment(Message msg, String filename)
             throws MessagingException {

        // Create and fill first part
        MimeBodyPart p1 = new MimeBodyPart();
        p1.setText("This is part one of a test multipart e-mail." +
                    "The second part is file as an attachment");

        // Create second part
        MimeBodyPart p2 = new MimeBodyPart();

        // Put a file in the second part
        FileDataSource fds = new FileDataSource(filename);
        p2.setDataHandler(new DataHandler(fds));
        p2.setFileName(fds.getName());

        // Create the Multipart.  Add BodyParts to it.
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(p1);
        mp.addBodyPart(p2);

        // Set Multipart as the message's content
        msg.setContent(mp);
    }

    public static void setHTMLContent(Message msg) throws MessagingException {

        String html = "<html><head><title>" +
                        msg.getSubject() +
                        "</title></head><body><h1>" +
                        msg.getSubject() +
                        "</h1><p>This is a test of sending an HTML e-mail" +
                        " through Java.</body></html>";

        // HTMLDataSource is an inner class
        msg.setDataHandler(new DataHandler(new HTMLDataSource(html)));
    }

    static class HTMLDataSource implements DataSource {
        private String html;

        public HTMLDataSource(String htmlString) {
            html = htmlString;
        }

        // Return html string in an InputStream.
        // A new stream must be returned each time.
        public InputStream getInputStream() throws IOException {
            if (html == null) throw new IOException("Null HTML");
            return new ByteArrayInputStream(html.getBytes());
        }

        public OutputStream getOutputStream() throws IOException {
            throw new IOException("This DataHandler cannot write HTML");
        }

        public String getContentType() {
            return "text/html";
        }

        public String getName() {
            return "JAF text/html dataSource to send e-mail only";
        }
    }
}

This is my code snippet..

Are you certain of the SMTP address and are you certain that Yahoo will accept STMP connections for this account? It appears that is limited to paid Yahoo! Mail Plus accounts - not the free ones.

hi dude

go to your yahoo mail there go to options.
you will see a link fot POP Access and Forwarding
go there and select Web & POP Access [POP Settings]
now save it.
thats all (only for yahoo.co.in users)

After this
change your code

String host = "www.yahoo.co.in";
props.put("mail.smtp.host",host);// "www.yahoo.co.in");
props.put("mail.smtp.port", "587");
props.put("mail.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.localhost","Mailer");

@ Suresh

I tried doing the same that you suggested but I am not really able to establish the connection..
I am getting the same error again.

Can you please go through my code and let me know if there are any other changes that I should make so that my program might work??

thanks in advance

Yahoo (as does any self respecting mailserver who doesn't want to be blocked as a spam relay by the entire world) doesn't allow connections by just about anyone.
And a kid from trying to write his first mass mailer is not someone they'd allow access to.

So then is there any other way out to make my code work..??

I mean is there any other thing that I can do??

Please help me out..

You are probably better off using a local smtp server if you have access to one...

Actually I have access to a local connection but I am unable to find the SMTp host name and other details for that..

so you have no smtp server that will allow you to connect to it and serve as your spam relay.
How surprising.

Is it obligatory for everyone on the net to have access to a local smtp server..??

I am really unable to get this idea?

Is there any way out??

I have tried to modify the code and now I am getting an error that :

"AuthenticationFailed" in the first run and "ConnectionTimedOut" in the other runs..

What is the possible way out??

This is one more piece of code that I have used for sending the mail.

The program compiles correctly and I get a message that Build SUCCESSFUL..

When I try to debug the code there is no error..

However, I am not really receiving the mail sent through this code..

My CODE :

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class maal {
    public static void main(String[] args){
        String recep[] = {"varsha.17aug@yahoo.co.in" , "suraj_enggyit@yahoo.co.in"};
        String sub = new String("Alert..!!");
        String msg = new String("Limit Exceeded...");
        String frm = new String("shveetis@yahoo.co.in"); 
        try {
        postMail(recep,sub,msg,frm);
        } catch(Exception e) { }
        System.exit(0);
    }


public static void postMail(String recipients[], String subject, String message , String from) throws MessagingException
{
    boolean debug = false;

     //Set the host smtp address
     Properties props = new Properties();
     props.put("mail.smtp.host", "smtp.mail.yahoo.co.in");
     
    // create some properties and get the default Session
    Session session = Session.getDefaultInstance(props, null);
    session.setDebug(debug);

    // create a message
    Message msg = new MimeMessage(session);

    // set the from and to address
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length]; 
    for (int i = 0; i < recipients.length; i++)
    {
        addressTo[i] = new InternetAddress(recipients[i]);
    }
    msg.setRecipients(Message.RecipientType.TO, addressTo);
   

    // Optional : You can also set your custom headers in the Email if you Want
    msg.addHeader("MyHeaderName", "myHeaderValue");

    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
}
}

Help please..!!

Is it obligatory for everyone on the net to have access to a local smtp server..??

I am really unable to get this idea?

Is there any way out??

no, but if you want to send email apart from through some web interface you will need to have access to some SMTP server which will authenticate you either by your network address or by some other credentials you supply it.

If you don't have that, tough luck.

Thanks a lot to everyone for your help..

I could finally make it run..

Actually dre was a prob with the setting of host name

Thanks again..

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.