当前位置:编程学习 > JAVA >>

javaMail--邮件怎么发不出去?

刚学这个,如果大家看到什么低级错误,希望提醒下,谢谢,在线等哈
这是错误信息:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.126.com, port: 25;
  nested exception is:
java.net.SocketException: Permission denied: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
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 module.Mcomposite.sendMail(Mcomposite.java:62)
at controller.CompositeServlet.doPost(CompositeServlet.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.SocketException: Permission denied: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
... 23 more
这是部分代码:
try{
       String user=(String)mySession.getAttribute("user");
       conn=com.getDBConnection();
       String query="select * from mail_setting where username=?";
          stmt=conn.prepareStatement(query);
          stmt.setString(1, user);
          rs=stmt.executeQuery();
          if(rs.next()){
           Host=rs.getString(5);
           User=rs.getString(6);
           Pass=rs.getString(7);
           Address=rs.getString(8);
          }else{
           mySession.setAttribute("errMsg", "请先进行邮箱设置");
           return false;
          }
     //尝试连接smtp服务器并发送邮件....
      Properties props=System.getProperties();
     // 根据邮件会话属性和密码验证器构造一个发送邮件的session.......
      session=Session.getDefaultInstance(props,null);
      //设置发送服务器地址.....
      props.put("mail.smtp.host", Host);
      props.put("mail.smtp.auth", "true");
     // 根据session创建一个邮件消息 .....
      MimeMessage message=new MimeMessage(session);
      //创建邮件发送者地址 .....
      message.setFrom(new InternetAddress(Address));
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
      message.setSubject(subject);
     // 设置邮件消息的主要内容  .....
      message.setText(content);
      message.saveChanges();
     // 发送邮件.....
      Transport transport=session.getTransport("smtp");
      transport.connect(Host, User, Pass);
      transport.sendMessage(message, message.getAllRecipients());
      transport.close();
      //如果发送成功,则从发件箱中删除邮件.....
      String DeleteQuery="delete from sendbox where username=? and save_time=?";
      stmt=conn.prepareStatement(DeleteQuery);
      stmt.setString(1, user);
      stmt.setString(2, savetime);
      stmt.executeUpdate();
     }catch (Exception e){
     e.printStackTrace();
     mySession.setAttribute("errMsg", "发送邮件时出现错误!请确认您的邮箱设置无误!");
     return false;
     }
     return true;
    } --------------------编程问答-------------------- 第一句话就报出来了错误,不能连接到126邮箱服务器 --------------------编程问答-------------------- 服务器连接有问题,试试163和qq的 --------------------编程问答--------------------
引用 2 楼 ww296346372 的回复:
服务器连接有问题,试试163和qq的
为什么126的会还有问题呢? --------------------编程问答-------------------- 设置错了呗 !!! --------------------编程问答--------------------
引用 4 楼 lixiaomeng627 的回复:
设置错了呗 !!!
设置应该没什么问题 --------------------编程问答-------------------- 把:
      Host=rs.getString(5);
           User=rs.getString(6);
           Pass=rs.getString(7);
           Address=rs.getString(8);

改成:
      Host="smtp.163.com";
           User="user";
           Pass="pass";
           Address="xxx@xx.xx";
连接服务器都连不了,说明你的数据有问题,还有就是,你要确保邮箱已开通了smtp,pop3服务 --------------------编程问答--------------------
引用 6 楼 xzy88 的回复:
把:
      Host=rs.getString(5);
           User=rs.getString(6);
           Pass=rs.getString(7);
           Address=rs.getString(8);

改成:
      Host="smtp.163.com";
           Use……

嗯,我也才是刚发现这个问题,我的win7是家庭版的,貌似没有ISS这个东西,除了升级外还有什么办法能开smtp? --------------------编程问答--------------------
引用 7 楼 a742358491 的回复:
引用 6 楼 xzy88 的回复:把:
      Host=rs.getString(5);
           User=rs.getString(6);
           Pass=rs.getString(7);
           Address=rs.getString(8);

改成:
      Host="smtp.163.com"……

开通邮件收发服务,跟你是什么系统没关系啊,是邮箱服务商的,比如,163,你要登录邮箱去设置,有些是默认开通的,有些你要自己去开通,我印象中,QQ,新浪邮箱都要自己去开通。 --------------------编程问答-------------------- 126的是最好连的
如果126的都连不上
其他的就更难了 --------------------编程问答-------------------- 看了看
你这个是没有认证的结果
需要到邮件服务器认证 --------------------编程问答-------------------- 你再加一句:props.setProperty("mail.transport.protocol","smtp"); --------------------编程问答--------------------
引用 10 楼 jumpheightway 的回复:
看了看
你这个是没有认证的结果
需要到邮件服务器认证

请问怎么去认证呢?在网上没搜到相关的额 --------------------编程问答-------------------- 还是没弄出来,有人会么? --------------------编程问答-------------------- 我是用spring集成的JavaMailSender来发送邮件的, 感觉简单点 --------------------编程问答--------------------
引用 14 楼 params 的回复:
我是用spring集成的JavaMailSender来发送邮件的, 感觉简单点
额,目前还没朝spring方面弄,嘿嘿,不过还是谢谢你 --------------------编程问答-------------------- 不是你程序的问题,是因为你所在的网络连接不到smtp.126.com --------------------编程问答--------------------
引用 16 楼 Giberson1 的回复:
不是你程序的问题,是因为你所在的网络连接不到smtp.126.com
嗯,程序我也看不出什么问题,但是,因为是初学,所以也不知道怎么设置,求指教.....嘿嘿
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,