Отправка электронной почты с вложениями в Spring Boot - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь отправить электронное письмо с вложенными файлами в Spring Boot.

Это базовая конфигурация свойств приложения сервера SMTP gmail:

Это мой EmailService:

EmailService

Когда я вызываю этот метод с пропущенным объектом mailMessageDto, нетИсключениеНичего не происходит, электронная почта не отправляется.

Я отладил строку кода javaMailSender.send (messsage), и все выглядит нормально.

Обновление

spring.mail.properties.mail.smtp.ssl.enable=false

должно быть ложным, не верным spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory

Ответы [ 2 ]

0 голосов
/ 19 августа 2019

шаг 1. добавить зависимости в porm.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

шаг 2. добавить код конфигурации в application.properties

spring.mail.host=smtp.gmail.com
spring.mail.port=465
spring.mail.username=username
spring.mail.password=password
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000
spring.mail.properties.mail.smtp.starttls.enable=true

шаг 3. добавить код в контроллер masterconroller.java

@GetMapping("/sendmail")
@ResponseBody
String home() {
    try {
        masterServiceImpl.sendEmail("path");
        return "Email Sent!";
    } catch (Exception ex) {
        return "Error in sending email: " + ex;
    }
}

шаг 4. добавить код в MasterServiceImpl.java

@Autowired
private JavaMailSender javaMailSender;
public void sendEmail(String path) throws Exception{
         MimeMessage message = javaMailSender.createMimeMessage();
         MimeMessageHelper helper = new MimeMessageHelper(message, true);
         helper.setTo("xyz@gmail.com");
         helper.setText("<html><body><h1>hello Welcome!</h1><body></html>", true);
         FileSystemResource file  = new FileSystemResource(new File(path));
         helper.addAttachment("testfile", file);
         helper.addAttachment("test.png", new ClassPathResource("test.jpeg"));
         helper.setSubject("Hi");
         javaMailSender.send(message);
   }
0 голосов
/ 24 октября 2018

Я предлагаю вам применить метод SRP к sendMessageWithAttachment(), извлекая функциональность при добавлении вложений:

private void addAttachments(MailMessageDto message, MimeMessageHelper helper) {
  message.getFiles().forEach(file -> addAttachment(file, helper));
}

Этот метод передает по всем файлам и добавляеткаждый файл, используя addAttachment():

private void addAttachment(File file, MimeMessageHelper helper) {
  String fileName = file.getName();
  try {
    helper.addAttachment(fileName, file);
    log.debug("Added a file atachment: {}", fileName);
  } catch (MessagingException ex) {
    log.error("Failed to add a file atachment: {}", fileName, ex);
  }
}

Это будет регистрировать ошибку для каждого неудачного вложения.Можете ли вы попробовать этот подход?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...