最近学习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中,但还是那个错误,苦思冥想都不知是哪理错了,所以就来请问个位大侠,

解决方案 »

  1.   

     使用JavaMail收发邮件  http://www.phome.asia/forum/thread/402.html
      

  2.   


    ==================发邮件==========================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();