Продолжайте получать javax.mail.Session $ 1: метод <init>() V не найден при попытке отправить электронное письмо с использованием Springboot + mvc - PullRequest
1 голос
/ 22 мая 2019

Это код, который генерирует ошибку:

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'
}

Я пытался решить эту проблему неделю назад с нулевым успехом.

Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

NoSuchMethodError указывает на то, что зависимость com.cisco.s3:soar-toolbox:2.0.0-beta.31 не совместима с используемой версией javax.mail.

soar-toolbox выглядит проприетарно, поэтому вы должны обратиться к документации, предоставленной Cisco, чтобы увидетькакие версии Java и Java EE поддерживаются.

0 голосов
/ 22 мая 2019

Не уверен, в чем именно заключается проблема, но я думаю, что вы не настроили почтовую учетную запись с объектом javax.mail.Session. Документы можно найти здесь: https://docs.oracle.com/javaee/6/api/javax/mail/Session.html

Вы должны иметь возможность обновлять /src/main/resources/application.properties такими свойствами, как:

  • spring.mail.host = smtp.gmail.com
  • spring.mail.port = 587
  • spring.mail.username = YOUR_EMAIL
  • spring.mail.password = YOUR_EMAIL_PASS
  • spring.mail.properties.mail.smtp.auth = истина
  • spring.mail.properties.mail.smtp.starttls.enable = истина

При этом вам также необходимо убедиться, что ваш провайдер электронной почты (gmail в указанном выше случае) настроен как, я полагаю, он называется - «сервисная электронная почта»

Некоторые улучшения я бы тоже посоветовал:

  1. @ Контроллеры также должны быть аннотированы @RequestMapping на уровне класса
  2. Если это для API, обозначенного @ResponseBody, показанным в одном из ваших @RequestMappings, я бы посоветовал переключить класс на @RestController и удалить @ ResponseBody
...