2013-04-29 20 views
0

我试图实现我的应用程序,以便当用户点击发送按钮时,电子邮件会自动生成并发送给其他收件人。我研究了Spring文档,并找到了一种方法来尝试它。但到目前为止例外保持上来:Spring Java电子邮件例外

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed 
    java.lang.NoClassDefFoundError: org/springframework/mail/MailException 
at java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) 
at java.lang.Class.getDeclaredConstructors(Class.java:1853) 
at 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor. 

determine CandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:230) 
at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory. 
determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:976) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)at 
                         org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
at 
    org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
at 
    org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657) 
at 

    org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
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.lang.ClassNotFoundException: org.springframework.mail.MailException 
at 

    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
at 

    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
... 32 more 

对于实现我修改了春天网站上的例子,并把它添加到我的构造方法提交表单:

public class ModuleController { 

private MailSender mailSender; 
    private SimpleMailMessage templateMessage; 

    public void setMailSender(MailSender mailSender) { 
    this.mailSender = mailSender; 
    } 

    public void setTemplateMessage(SimpleMailMessage templateMessage) { 
    this.templateMessage = templateMessage; 
    } 

    @RequestMapping(value = "/module", method = RequestMethod.POST, params = "send") 
public String sendModule(@ModelAttribute("module") Module module,BindingResult 
    result, ModelMap map) { 
SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage); 

    msg.setTo(module.getSta().getEmail()); 

    msg.setText(
    "Dear " + module.getSta().getName() 
     + "a coursework has been submitted for checking" 
     + module.getModuleCode() 
     +module.getModuleName()); 
    try{ 
    this.mailSender.send(msg); 
    } 
    catch(MailException ex) { 
    // simply log it and go on... 
    System.err.println(ex.getMessage()); 

} 
return "/staff/checker/view_submission"; 
} 

在项目的servlet我添加了这个:

 <beans:bean id="mailSender" 
    class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <beans:property name="host" value="mail.mycompany.com"/> 
</beans:bean> 

<!-- this is a template message that we can pre-load with default state --> 
<beans:bean id="templateMessage" 
    class="org.springframework.mail.SimpleMailMessage"> 
    <beans:property name="from" value="[email protected]"/> 
    <beans:property name="subject" value="Your order"/> 
</beans:bean> 

<beans:bean id="moduleController" 
    class="com.**.**.controller.ModuleController"> 
    <beans:property name="mailSender" ref="mailSender"/> 
    <beans:property name="templateMessage" ref="templateMessage"/> 
</beans:bean> 

我还添加了两个jar,JavaMail mail.jar和JAF activation.jar到类路径。如果这个实现是错误的,并且例外的原因请让我知道。

+1

它看起来像缺少JAR依赖项。找出哪个JAR org.springframework.mail.MailException存在,并确保它位于WAR的lib文件夹中或由您的应用服务器以某种方式提供。 – CodeChimp 2013-04-29 20:14:44

+0

谢谢。我将两个罐子添加到我的项目库文件夹中,然后刷新项目,然后重新启动服务器,异常消失。 – user2259555 2013-04-29 20:53:59

回答

3

你需要确保你的类路径中有spring-context-support jar。

+0

是的,谢谢我还加了那个罐子。 – user2259555 2013-04-30 12:32:04