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的 --------------------编程问答-------------------- 为什么126的会还有问题呢? --------------------编程问答-------------------- 设置错了呗 !!! --------------------编程问答-------------------- 设置应该没什么问题 --------------------编程问答-------------------- 把:
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服务 --------------------编程问答--------------------
嗯,我也才是刚发现这个问题,我的win7是家庭版的,貌似没有ISS这个东西,除了升级外还有什么办法能开smtp? --------------------编程问答--------------------
开通邮件收发服务,跟你是什么系统没关系啊,是邮箱服务商的,比如,163,你要登录邮箱去设置,有些是默认开通的,有些你要自己去开通,我印象中,QQ,新浪邮箱都要自己去开通。 --------------------编程问答-------------------- 126的是最好连的
如果126的都连不上
其他的就更难了 --------------------编程问答-------------------- 看了看
你这个是没有认证的结果
需要到邮件服务器认证 --------------------编程问答-------------------- 你再加一句:props.setProperty("mail.transport.protocol","smtp"); --------------------编程问答--------------------
请问怎么去认证呢?在网上没搜到相关的额 --------------------编程问答-------------------- 还是没弄出来,有人会么? --------------------编程问答-------------------- 我是用spring集成的JavaMailSender来发送邮件的, 感觉简单点 --------------------编程问答-------------------- 额,目前还没朝spring方面弄,嘿嘿,不过还是谢谢你 --------------------编程问答-------------------- 不是你程序的问题,是因为你所在的网络连接不到smtp.126.com --------------------编程问答-------------------- 嗯,程序我也看不出什么问题,但是,因为是初学,所以也不知道怎么设置,求指教.....嘿嘿
补充:Java , Web 开发