最近学习JAVAMAIL,在学习利用tomcat中的对象来实现web的发送邮件时,我的代码就错误啦,错误如下:
javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:132) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) at org.apache.naming.NamingContext.lookup(NamingContext.java:792) at org.apache.naming.NamingContext.lookup(NamingContext.java:139) at org.apache.naming.NamingContext.lookup(NamingContext.java:780) at org.apache.naming.NamingContext.lookup(NamingContext.java:152) at cn.itcast.javamail3.web.mail.servlets.SendMailServlet.doPost(SendMailServlet.java:55) at cn.itcast.javamail3.web.mail.servlets.SendMailServlet.doGet(SendMailServlet.java:34) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:743) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:619) 我的mail.jar是放在Tomcat 5.5\common\lib,而视频说的是要放在Tomcat/中的WEB-INF\lib下,我找不大这样的地方,上网搜索说放在那也是一样的,不知这没错吧?
我的代码是跟着视频写的,视频是有成功的,但我这就不行啦,
try {
//Demo2.main(new String[]{});
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Dog"); Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
InternetAddress to[] = new InternetAddress[1];
to[0] = new InternetAddress("[email protected]");
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject("ha");
message.setText("test");
//Transport.send(message);
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "12356432", "sdcsdcsc");
transport.sendMessage(message, to);
transport.close();
response.getWriter().print("ok!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace(response.getWriter());
}
}这是我的代码,我用的是MyEclipse 6.0和mySQL,网上说会有兼容问题,现在我的这代码还没涉及数据库,应该还没涉及所谓的兼容问题吧,网上搜还有说是activation.jar的却少,不知是不是呢?上网下了1个,不知道放哪,之后就如mail.jar一样放在tomcat中,但还是那个错误,苦思冥想都不知是哪理错了,所以就来请问个位大侠,
javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:132) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) at org.apache.naming.NamingContext.lookup(NamingContext.java:792) at org.apache.naming.NamingContext.lookup(NamingContext.java:139) at org.apache.naming.NamingContext.lookup(NamingContext.java:780) at org.apache.naming.NamingContext.lookup(NamingContext.java:152) at cn.itcast.javamail3.web.mail.servlets.SendMailServlet.doPost(SendMailServlet.java:55) at cn.itcast.javamail3.web.mail.servlets.SendMailServlet.doGet(SendMailServlet.java:34) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:743) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:619) 我的mail.jar是放在Tomcat 5.5\common\lib,而视频说的是要放在Tomcat/中的WEB-INF\lib下,我找不大这样的地方,上网搜索说放在那也是一样的,不知这没错吧?
我的代码是跟着视频写的,视频是有成功的,但我这就不行啦,
try {
//Demo2.main(new String[]{});
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Dog"); Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
InternetAddress to[] = new InternetAddress[1];
to[0] = new InternetAddress("[email protected]");
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject("ha");
message.setText("test");
//Transport.send(message);
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "12356432", "sdcsdcsc");
transport.sendMessage(message, to);
transport.close();
response.getWriter().print("ok!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace(response.getWriter());
}
}这是我的代码,我用的是MyEclipse 6.0和mySQL,网上说会有兼容问题,现在我的这代码还没涉及数据库,应该还没涉及所谓的兼容问题吧,网上搜还有说是activation.jar的却少,不知是不是呢?上网下了1个,不知道放哪,之后就如mail.jar一样放在tomcat中,但还是那个错误,苦思冥想都不知是哪理错了,所以就来请问个位大侠,
==================发邮件==========================1。将mail.jar和activation.jar导入到环境变量中2。导入相应的包
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;3。设置邮件的属性(设置协议,服务器,端口号)
Properties prop = new Properties();
prop.put("mail.transport.protocol","smtp") 设置协议
prop.put("mail.smtp.host","服务器地址") 设置接收邮件的服务器
prop.put("mail.smtp.port","端口号") 设置端口号
4。创建session
Session session=Session.getDefaultInstance(prop);5。创建Message
Message msg=new MimeMessage(session);6。设置消息内容(邮件内容)
msg.setFrom(InternetAddress add)
msg.setRecipient("发送方式","收信人地址")
msg.setDate(Date d) 设置日期
msg.setSubject(String s) 设置主题
msg.setText(String s) 设置文本内容7。发送消息
Transport.send(msg);
=====================发送带附件的邮件=====================================
1。将mail.jar和activation.jar导入到环境变量中2。导入相应的包
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;3。设置邮件的属性(设置协议,服务器,端口号)
Properties prop = new Properties();
prop.put("mail.transport.protocol","smtp") 设置协议
prop.put("mail.smtp.host","服务器地址") 设置接收邮件的服务器
prop.put("mail.smtp.port","端口号") 设置端口号4。创建session
Session session=Session.getDefaultInstance(prop);5。创建Message
Message msg=new MimeMessage(session);6。设置消息内容(邮件内容)
msg.setFrom(InternetAddress add)
msg.setRecipient("发送方式","收信人地址")
msg.setDate(Date d) 设置日期
msg.setSubject(String s) 设置主题 a)设置邮件正文:
MimeBodyPart textBody = new MimeBodyPart()
textBody.setText( “ 邮件正文 “);
b)设置邮件附件
MimeBodyPart fileBody = new MimeBodyPart();
FileDataSource fds = new FileDataSource(“ 附件文件路径”);
//将文件加载到附件对象
fileBody.setDataHandle( new DataHandle( fds ));
//设置附件显示的名字
fileBody.setName( fds.getName() );
d)组合两个部分 (邮件附件,邮件正文)
MultiPart mut = new MultiPart()
mut.addBodyPart( textBody);
mut.addBodyPart( fileBody);
e)追加到邮件消息对象中
msg.setContent ( mut) ;
7。发送消息
Transport.send(msg);
===============发送需要验证的服务器==================prop.put("mail.smtp.auth", "true");//声明要验证//发送时使用其服务器的用户名和密码来请求连接
Transport tran=session.getTransport("smtp");
tran.connect("smtp.163.com","wangbin19761205" , "123456789");
tran.sendMessage(m,m.getAllRecipients());
========================接收邮件==================
1。导入相应的包
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
2。创建Properties 对象 (设置协议,服务器,端口号)
Properties prop=new Properties(); 3。创建Session
Session session = Session.getDefaultInstance(prop);4。 创建Store并登陆
Store store=session.getStore("pop3");
store.connect("服务器名","用户名","密码");5。取得Folder并打开
Folder folder=store.getFolder("Inbox");
folder.open("打开方式")
注:打开方式为 Folder.READ_ONLY 等……6。取得邮件
Message message[] = folder.getMessages();7。关闭Folder与Store
folder.close(false);
store.close();