小弟刚学用JSP来写程序.. 今天用JAVAMAIL来尝试写一个发MAIL的小程序...  
但是写好后却不发不成功...  上网看了很多很多..都没有一个真正能解决的答案..  看看那位大侠可以帮帮我... 我的JAVA代码是这样的..  package web;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
public class SendTextMail { String SMTPHost,user,password,from,to,subject,content;
public SendTextMail() {
// TODO Auto-generated constructor stub
}

public String getContent()
{
return content;
}
public void setContent(String content)
{
try{
content = new String(content.getBytes("ISO8859-1"),"utf-8");
}catch(Exception ex){
ex.printStackTrace();
}
this.content = content;
}

public String getFrom(){
return from;
}
public void setFrom(String from){
this.from = from;
}
public String getTo(){
return to;
}
public void setTo(String to){
this.to = to;
}
public String getUser()
{
return user;
}
public void setUser(String user){
this.user = user;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getSMTPHost(){
return SMTPHost;
}
public void setSMTPHost(String host){
this.SMTPHost = host;
}
public String getSubject(){
return subject;
}
public void setSubjet(String subject){
try{
subject = new String(subject.getBytes("iso8859-1"),"utf-8");
}catch(Exception ex){
ex.printStackTrace();
}
}
static class SmtpAuth extends Authenticator{
String user,password;

void setAccount(String user,String password){
this.user = user; 
this.password = password;
}

protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(user,password);
}
}

public boolean send()
{
Properties props = new Properties();
props.put("mail.smtp.host",SMTPHost);
props.put("mail.smtp.auth","true");

try{
SmtpAuth auth = new SmtpAuth();
auth.setAccount(user, password);

Session mailSession = Session.getInstance(props,auth);
mailSession.setDebug(true);

Message msg = new MimeMessage(mailSession);

msg.setFrom(new InternetAddress(from));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
msg.setText(content);
msg.setSentDate(new Date());
msg.setHeader("X-Priority", "1");
msg.saveChanges();

Transport trans = mailSession.getTransport("smtp");
trans.connect(SMTPHost,user,password);
trans.sendMessage(msg,msg.getAllRecipients());
trans.close();
return true;
}catch(Exception ex){
ex.printStackTrace();
return false;
}
}}
错误信息...  DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.163.com", port 25, isSSL false
DEBUG SMTP: EOF: [EOF]
DEBUG SMTP: could not connect to host "smtp.163.com", port: 25, response: -1javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25, response: -1
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1379)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:288)
at javax.mail.Service.connect(Service.java:169)
at web.SendTextMail.send(SendTextMail.java:105)
at org.apache.jsp.sendMail_jsp._jspService(sendMail_jsp.java:65)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:619)
我看不懂..好像是连接不了SMTP.163.COM吧?? 怎么样才能解决呢??  网上有人说是因为防火墙的问题..我试过关了也不行.. 有人说是身份验证的问题.. 我也检查了我的代码一次.. 好像也符合要求...  
求大侠们求求小弟... :)

解决方案 »

  1.   

    估计是网络问题你试试:
    ping smtp.163.com
    telnet smtp.163.com 25看看通不通 
      

  2.   

    看看邮件端口(port 25)是否被占用
      

  3.   

    我刚PING过..  PING得通..  但是TELNET的话 就不知道为什么跳到黑屏.然后什么都没有出来..  
      

  4.   


    我怎样看port 25 有没有被占用呢??  
    如果被占用了..  我应该怎样在代码中改端口呢??  
      

  5.   


    我的邮箱支持SMTP阿..  我很早之前就注册了.
      

  6.   

    大侠们...如果你可以解决我的问题..请email我阿.. 谢谢.. [email protected]
      

  7.   

    你试试指定25端口试试,好像是这个原因导致的
    public void connect(String host, int port, String user, String password)
    调用这个方法
      javamail的实现是
     public void connect(String host, String user, String password)
    throws MessagingException {
    connect(host, -1, user, password);
     }
     
      

  8.   

    javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25, response: -1 为什么那么多人用163呢?估计都是一个老师写的程序。
    你换一个别的邮箱看看吧。163的我就没成功过。
      

  9.   

    给你推荐本书:孙卫琴《java邮件开发详解》
      

  10.   

    谢谢各位..我的问题已经解决~~  我用FOXMAIL试了一下用163的ACCOUNT来发MAIL 是发不通的. 估计163已经封了.SMTP的端口.. 然后我试了一下GMAIL的..  PORT 465 然后要添加SSL协议上去才能够发得通..  谢谢各位...谢谢.