java - 继续接收 javax.mail.Session$1: 方法()V 尝试使用 Springboot + mvc 发送电子邮件时未找到
问题描述
这是产生错误的代码:
import com.cisco.s3.util.Logging;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class EmailController {
private static final Logger log = Logging.getLogger(EmailController.class);
@Autowired
private JavaMailSender sender;
@RequestMapping("/simpleemail")
@ResponseBody
String home() {
try {
sendEmail();
return "Email Sent!";
}catch(Exception ex) {
return "Error in sending email: " + ex;
}
}
private void sendEmail() throws Exception{
MimeMessage message = sender.createMimeMessage();
// Enable the multipart flag!
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setTo("arterome@cisco.com");
helper.setFrom("security-orchestration@cisco.com");
helper.setText("How are you?");
helper.setSubject("Hi");
ClassPathResource file = new ClassPathResource("cat.jpg");
helper.addAttachment("eagle.jpg", file);
sender.send(message);
}
}
而且错误很长,我补充一段:
```
[ERROR] 2019-05-22 09:14:17 @ org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: javax.mail.Session$1: method <init>()V not found] with root cause
java.lang.NoSuchMethodError: javax.mail.Session$1: method <init>()V not found
at javax.mail.Session.<clinit>(Session.java:240) ~[soar-toolbox-2.0.0-beta.31.jar!/:na]
at org.springframework.mail.javamail.JavaMailSenderImpl.getSession(JavaMailSenderImpl.java:161) ~[spring-context-support-5.0.11.RELEASE.jar!/:5.0.11.RELEASE]
at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:339) ~[spring-context-support-5.0.11.RELEASE.jar!/:5.0.11.RELEASE]
at com.cisco.s3.controller.EmailController.sendEmail(EmailController.java:44) ~[classes!/:na]
at com.cisco.s3.controller.EmailController.home(EmailController.java:36) ~[classes!/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_191]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_191]
```
我已经阅读了很多关于同一个项目的内容,这似乎是某个地方的兼容性问题,但我只是无法跟踪它。
我正在使用 gradle 作为依赖项:
dependencies {
compile 'com.cisco.s3:soar-toolbox:2.0.0-beta.31'
compile 'org.apache.tomcat.embed:tomcat-embed-jasper'
compile 'org.slf4j:jcl-over-slf4j'
compile 'org.slf4j:jul-to-slf4j'
compile 'org.springframework.boot:spring-boot-starter-actuator'
compile 'org.springframework.boot:spring-boot-starter-security'
compile 'org.springframework.boot:spring-boot-starter-web'
compile'org.springframework.boot:spring-boot-starter-mail'
compile 'org.springframework.security:spring-security-ldap'
compile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.10.2'
testCompile 'org.springframework.boot:spring-boot-starter-test'
testCompile 'org.springframework.security:spring-security-test'
}
自一周前以来,我一直在尝试解决此问题,但成功率为零。
谢谢!!!
解决方案
NoSuchMethodError
表示依赖项与您正在运行的版本com.cisco.s3:soar-toolbox:2.0.0-beta.31
不兼容。javax.mail
soar-toolbox
看起来是专有的,因此您必须参考 Cisco 提供的文档以查看支持哪些 Java 和 Java EE 版本。
推荐阅读
- python - 根据数据帧内的值将熊猫数据帧值与 rgb 颜色值的键对应
- laravel - laravel:不显示传递的数据
- amazon-web-services - 如何将 AWS::ECS::Service 更新为 Fargate 启动类型
- python - post_save 信号后无法运行自定义装饰器
- reactjs - 如何导航到一个组件并将其作为整个页面打开
- python - 逗号后如何匹配多个IP地址?
- javascript - 如何从 JSON 对象返回特定数量的单词?
- angular - 将 Angular 10 与 BsDatepickerConfig 和 ngModel 一起使用 - 存储日期,而不是时间
- xaml - Uno Platform - 共享项目中的参考资源字典
- angular - 为什么 LoadingController 在 API 调用期间尝试将其关闭时会抛出“覆盖不存在”