简体   繁体   中英

Getting javax.mail.MessagingException and java.net.SocketException

I am trying to send a email using SMTP of my yahoo(smtp.mail.yahoo.com) account to my gmail account.

But am getting following exception.

javax.mail.MessagingException: Exception reading response;
  nested exception is:
        java.net.SocketException: Connection reset
        at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2153)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1912)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
        at javax.mail.Service.connect(Service.java:295)
        at javax.mail.Service.connect(Service.java:176)
        at javax.mail.Service.connect(Service.java:125)
        at javax.mail.Transport.send0(Transport.java:194)
        at javax.mail.Transport.send(Transport.java:124)
        at Sendmail.postMail(Sendmail.java:40)
        at Sendmail.main(Sendmail.java:49)
Caused by: java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:110)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
        at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:89)
        at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2131)
        ... 9 more
BUILD SUCCESSFUL (total time: 2 seconds)


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

Code:

public class Sendmail {

    public 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.com");

        // 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);
    }

    public static void main(String[] args) {

        try{

            Sendmail sende = new Sendmail();
            String senderemailid [] = {"poorna.anu@gmail.com"};
            sende.postMail(senderemailid,"Hi","Come to room","poorna_meenakshi@yahoo.com");

        }catch(MessagingException e){
            e.printStackTrace();
        }        
    }
}

smtp.mail.yahoo.net is a CNAME that points to a number of different mail servers. Yahoo happens to be having some problems with their mail servers today...

broach@broach-laptop:~$ telnet smtp.mail.yahoo.com 25
Trying 98.136.185.95...
Connected to smtp.mail.us.am0.yahoodns.net.
Escape character is '^]'.
Connection closed by foreign host.

broach@broach-laptop:~$ telnet smtp.mail.yahoo.com 25
Trying 98.138.84.55...
Connected to smtp.mail.us.am0.yahoodns.net.
Escape character is '^]'.
220 smtp113.mail.ne1.yahoo.com ESMTP

broach@broach-laptop:~$ telnet smtp.mail.yahoo.com 25
Trying 98.139.212.139...
Connected to smtp.mail.us.am0.yahoodns.net.
Escape character is '^]'.
Connection closed by foreign host.

Trying 5 times just now I got 3 failures and 2 connects.

This is my code just in case:

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

    public class SendEmail
    {
       public static void main(String [] args)
       {    
          // Recipient's email ID needs to be mentioned.
          String to = "sameuser@yahoo.com";

          // Sender's email ID needs to be mentioned
          String from = "sameuser@yahoo.com";

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

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

          // Setup mail server
          properties.put("mail.transport.protocol", "smtp");
          properties.put("mail.smtp.port", "25");
          properties.put("mail.smtp.host", "smtp.mail.yahoo.com.net");

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

          try{
             // 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.
             message.addRecipient(Message.RecipientType.TO,
                                      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
             Transport.send(message);
             System.out.println("Sent message successfully....");
          }catch (MessagingException mex) {
             mex.printStackTrace();
          } //catch(Message)
       }
    }

Try to set the mail.transport.protocol property

props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.port", "25");

You do need some other piece of code to authentication though. Yahoo requires you to authenticate yourself prior to using their smtp service - they don't allow anybody to use their smtp server for relaying

(2019 July)

I got this Exception too, what fixed for me is:

(I'm using multiple servers)

  1. Stopped each server (make sure the the server you start last, you run first (check which server depends on which), basically stop servers in DESC running order);

  2. Close Eclipse (I'm using Eclipse Java EE IDE for Web Developers. Version: Neon.3 Release (4.6.3) Build id: 20170314-1500);

(2.5. Check and kill any other java processes related to your project)

  1. Start Eclipse and run servers in corerct order and your classes, etc.

In my case, restart helped me to send email.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM