2011-09-05 120 views
4

我的程序如下:发送邮件不能正常工作,并显示异常

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author Cygnet 
*/ 
    import java.util.Properties; 

    import javax.mail.Message; 
    import javax.mail.MessagingException; 
    import javax.mail.Session; 
    import javax.mail.Transport; 
    import javax.mail.Message.RecipientType; 
    import javax.mail.internet.AddressException; 
    import javax.mail.internet.InternetAddress; 
    import javax.mail.internet.MimeMessage; 
    public class SendMail { 
     private String from; 
     private String to; 
     private String subject; 
     private String text; 

     public SendMail(String from, String to, String subject, String text){ 
      this.from = from; 
      this.to = to; 
      this.subject = subject; 
      this.text = text; 
        System.out.println("your massege running here"); 
     } 

     public void send(){ 

      Properties props = new Properties(); 
      props.put("mail.smtp.host", "smtp.cygnet3.com"); 
      props.put("mail.smtp.port", "8383"); 

      Session mailSession = Session.getDefaultInstance(props); 
      Message simpleMessage = new MimeMessage(mailSession); 

      InternetAddress fromAddress = null; 
      InternetAddress toAddress = null; 
      try { 
       fromAddress = new InternetAddress(from); 
       toAddress = new InternetAddress(to); 
      } catch (AddressException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      try { 
       simpleMessage.setFrom(fromAddress); 
       simpleMessage.setRecipient(RecipientType.TO, toAddress); 
       simpleMessage.setSubject(subject); 
       simpleMessage.setText(text); 
       Transport.send(simpleMessage); 
      } catch (MessagingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
       } 
      public static void main(String[] args) {  
      String from = "[email protected]"; 
      String to = "[email protected]"; 
      String subject = "Hi server problem"; 
      String message = "I could not find anything in the coding"; 
      SendMail sendMail = new SendMail(from, to, subject, message); 
      sendMail.send(); 
        System.out.println("Your massege is successfully sent"); 
     }   

    } 

我得到以下异常:

run-main: 
your massege running here 
javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
     java.net.SocketException: Connection reset 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462) 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370) 
     at javax.mail.Service.connect(Service.java:275) 
     at javax.mail.Service.connect(Service.java:156) 
     at javax.mail.Service.connect(Service.java:105) 
     at javax.mail.Transport.send0(Transport.java:168) 
     at javax.mail.Transport.send(Transport.java:98) 
     at SendMail.send(SendMail.java:58) 
Your massege is successfully sent 
     at SendMail.main(SendMail.java:71) 
Caused by: java.net.SocketException: Connection reset 
     at java.net.SocketInputStream.read(SocketInputStream.java:168) 
     at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97) 
     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:75) 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1440) 
     ... 9 more 
BUILD SUCCESSFUL (total time: 2 minutes 15 seconds) 

请帮助我,我在做什么错误?我不想做用户名和密码认证,我的端口号和用户ID工作正常。

+0

*“你massege发送成功” *你的消息拼写错误。 –

+0

对于该错误感到抱歉 – user898489

+0

发布电子邮件地址是获取更多垃圾邮件的好方法,您可能不希望发生这种情况。 – Arjan

回答

1

“连接重置”意味着意外关闭了您尝试建立的连接。也许你的SMTP服务器正在等待一个安全的连接(SSL或TLS)。你可以尝试用telnet或netcat连接到smtp.cygnet3.com:8383,看看你得到了什么。如果你有openssl,你可以检查它是否是一个类似于openssl s_client -connect smtp.cygnet3.com:8383之类的安全端口。

编辑:正如Brian指出的那样,端口8383是一个HTTP服务器。它看起来像邮件服务器的Web界面。尝试使用标准端口25(不安全)或587(安全)。

+0

试过了,没有快乐。 ::耸肩::尽管OP并没有真正掌握核心概念,但我不知道它会有所帮助。 –

+0

@Brian:25,465和587都是开放的(对我来说)。 25上的netcat和465上的openssl都会返回一个看起来像SMTP的横幅,但是对HELO或EHLO没有反应...... –

+0

Heh ... *现在*他们是。当我评论时,他们不是。我责怪互联网。 –

1

该端口上的主机上没有运行SMTP服务器。您需要一个有效的SMTP服务器。

它似乎有在该端口上运行的Web服务器:

[email protected]:~$ telnet smtp.cygnet3.com 8383 
Trying 66.7.149.27... 
Connected to cygnet3.com. 
Escape character is '^]'. 
HELO? 
HTTP/1.1 400 Bad Request 
Content-Type: text/html; charset=us-ascii 
Server: Microsoft-HTTPAPI/2.0 
Date: Mon, 05 Sep 2011 05:35:35 GMT 
Connection: close 
Content-Length: 326 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<HTML><HEAD><TITLE>Bad Request</TITLE> 
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> 
<BODY><h2>Bad Request - Invalid Verb</h2> 
<hr><p>HTTP Error 400. The request verb is invalid.</p> 
</BODY></HTML> 
Connection closed by foreign host. 
+0

只是解释我的事情。我无法理解 – user898489

+0

@ user898489:您正在使用错误的服务器/端口。您正试图让Web服务器发送电子邮件,这是行不通的。尝试端口25,这是发送电子邮件的标准端口。 – Arjan

+0

什么将是我的smtp域? – user898489