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(SMTPTransp开发者_StackOverflowort.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.
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
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)
}
}
(2019 July)
I got this Exception too, what fixed for me is:
(I'm using multiple servers)
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);
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)
- Start Eclipse and run servers in corerct order and your classes, etc.
In my case, restart helped me to send email.
精彩评论