2016-02-26 93 views
0

我在Netbeans中创建了一个新项目,在该项目中设置了一个servlet(Tomcat 8),并且我想实现一种使用gmail发送电子邮件的方法。我发现了很多例子(如this)。我创建了一个类使用JavaMail的ClassNotFoundException

import java.util.Properties; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendMail { 

final String username = "[email protected]"; 
final String password = "pass"; 

public SendMail() { 

} 


public void send(){ 
    Properties props = new Properties(); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "587"); 

    Session session = Session.getInstance(props, //<- points1 here 
     new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
      } 
     }); 

    try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("[email protected]")); 
      message.setRecipients(Message.RecipientType.TO, 
        InternetAddress.parse("[email protected]")); 
      message.setSubject("Testing Subject"); 
      message.setText("Dear Mail Crawler," 
        + "\n\n No spam to my email, please!"); 

      Transport.send(message); 

      System.out.println("Done"); 

    } catch (MessagingException e) { 
      throw new RuntimeException(e); 
    } 
} 

}

,并在servlet我打电话给那个方法

SendMail send = new SendMail(); 
send.send(); //<- points 2 

我得到一个错误:java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger

org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [MyServlet] in context with path [/MyServlet] threw exception [Servlet execution threw an exception] with root cause 
java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1295) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1147) 
    at javax.mail.Session.initLogger(Session.java:227) 
    at javax.mail.Session.<init>(Session.java:212) 
    at javax.mail.Session.getInstance(Session.java:248) 
    at com.myPackage.MyServlet.SendMail.send(SendMail.java:35) //->points 1 
    at com.myPackage.MyServlet.MyServlet.processRequest(MyServlet.java:77) //->points 2 
    at com.myPackage.MyServlet.MyServlet.doGet(MyServlet.java:266) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.myPackage.MyServlet.LogFilter.doFilter(LogFilter.java:22) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:724) 

我已经添加了2罐子javaee.jarmail.jar在我的项目中。

回答

0

您正在混合多个版本的JavaMail。 javaee.jar only includes the API classes for compiling not execution。 mail.jar将成为旧版本的JavaMail。如果您只需要JavaMail,然后download the javax.mail.jar并使用它。

+0

实际上,javavee.jar只包含JavaMail API,而不是完整的实现。这对编译你的应用程序(这是它的目标)工作得很好,但为了运行你的应用程序,你需要上面提到的完整的实现jar。 –