2011-04-14 3 views
0

yahoo (smtp.mail.yahoo.com) 계정의 SMTP를 gmail 계정에 사용하여 전자 메일을 보내려고합니다.javax.mail.MessagingException 및 java.net.SocketException 받기

그러나 다음 예외가 발생합니다.

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.*; 

코드 :

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 [] = {"[email protected]"}; 
      sende.postMail(senderemailid,"Hi","Come to room","[email protected]"); 

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

이 오류를 일으키는 코드 (짧은) 예를 제공하십시오. – musiKk

+0

가장 잘못된 서버를 사용하고있을 가능성이 큽니다. mpandit-mbp : ~ mpandit $ telnet smtp.mail.yahoo.com 25 시도 중 74.6.228.71 ... telnet : 74.6.228.71에 연결 : 연결이 거부되었습니다. 시도 중 98.138.84.55 ... smtp.mail.us.am0.yahoodns.net에 연결됨. 이스케이프 문자는 '^]'입니다. 220 smtp110.mail.ne1.yahoo.com ESMTP help 214 SMTP RFC : http : // tools.ietf.org/html/rfc2821' – lobster1234

+0

지저분한 서식을 쓰는 것에 대해 미안하다. 줄 바꿈을하지 않았다는 것을 깨닫지 못했다. – lobster1234

답변

0

시도는 mail.transport.protocol 속성 당신은하지만 인증 관련 코드의 다른 조각을 필요로 할

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

을 설정합니다. Yahoo는 smtp 서비스를 사용하기 전에 자신을 인증해야합니다. 아무도 자신의 smtp 서버를 중계에 사용할 수 없습니다.

+0

그 문장을 추가하면 .. javax.mail .MessagingException : SMTP 호스트에 연결할 수 없습니다. smtp.mail.yahoo.com, port : 25; – Poornachandra

+0

@Poornachandra, OK, 그러면이 props.put ("mail.smtp.port", "25")이 누락됩니다. – Gilbeg

1

smtp.mail.yahoo.net은 여러 메일 서버를 가리키는 CNAME입니다. 야후는 지금은 3 개 실패와 2 넥트를 가지고 5 번 시도 ... 오늘

[email protected]:~$ 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. 

[email protected]:~$ 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 

[email protected]:~$ 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. 

을 자신의 메일 서버에 일부 문제가 될 일이.

+0

그래서 당신은 무엇을 제안합니까? – Poornachandra

+0

예외를 잡아서 다시 시도하십시오. 어쨌든해야합니다. –

+0

안녕하세요, 다시 .. 어제 전체를 시도해이 예외를 해결했습니다 .. 몇 가지 더 많은 것들을 발견했습니다 .. 그리고 몇 가지 예외 .. 1. javax.mail.MessagingException 및 java.net.SocketException은 poor 때문에 발생했을 수 있습니다. smtp 서버. – Poornachandra

0

이 내 코드는 경우입니다 :

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 = "[email protected]"; 

      // Sender's email ID needs to be mentioned 
      String from = "[email protected]"; 

      // 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) 
     } 
    } 
관련 문제