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到类路径。如果这个实现是错误的,并且例外的原因请让我知道。
它看起来像缺少JAR依赖项。找出哪个JAR org.springframework.mail.MailException存在,并确保它位于WAR的lib文件夹中或由您的应用服务器以某种方式提供。 – CodeChimp 2013-04-29 20:14:44
谢谢。我将两个罐子添加到我的项目库文件夹中,然后刷新项目,然后重新启动服务器,异常消失。 – user2259555 2013-04-29 20:53:59