2013-04-29 25 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