Весна: отправить HTML почта - PullRequest
1 голос
/ 22 января 2020

Я хочу создать службу для отправки HTML почты по электронной почте Spring с MimeMessage. Вот мой сервис:

    public void sendHtmlEmail(String receiver,String Subject, String htmlBody) throws MessagingException {

            MimeMessage msg = javaMailSender.createMimeMessage();

            // true = multipart message
            MimeMessageHelper helper = new MimeMessageHelper(msg, false);

            helper.setTo(receiver);

            helper.setSubject(Subject);

            // true = text/html
            helper.setText(htmlBody, true);


            javaMailSender.send(msg);
        }

Проблема в том, что я не получаю электронное письмо с html, а с тегами html, зная, что в методе setText() указано значение true. ! электронное письмо, которое я отправляю, отображается в виде простого html текста, подобного следующему

<html><h1>some text !</h1></html>

некоторые ссылки, которые могут вам помочь:

https://mkyong.com/spring-boot/spring-boot-how-to-send-email-via-smtp/

https://www.baeldung.com/spring-email

вот приложение. Свойства:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password

# Other properties
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

# TLS , port 587
spring.mail.properties.mail.smtp.starttls.enable=true

и контроллер

@PostMapping("/htmlMail")
    public String sendHtmlMail(@RequestBody MailDTO mail) {
        mailService.sendHtmlEmail(mail.getReceiver(),mail.getSubject(),mail.getHtmlbody());
        return "html E-Mail Sent ! ";
    }

1 Ответ

1 голос
/ 22 января 2020

Иногда обязательного параметра нет, поэтому он выдает ошибку. В вашем вопросе дан не весь код или ошибка, поэтому я опишу на своем пути.

Сначала проверьте следующие два пункта,

  1. Предоставлены все необходимые данные конфигурации.
  2. У вашего идентификатора электронной почты должно быть разрешение на отправку почты с использованием вашего приложения (если вы используете «Разрешить менее безопасное приложение» в своей учетной записи Gmail.

Файл свойств Yml

mail:
    host: smtp.gmail.com                   // Take based on your mail provider
    port: 587
    username: *@gmail.com
    password: ****
    transport:
      protocol: smtp
    properties:
      test-connection: true
      debug: true
      smtp:
        auth: true
        starttls:
          enable: true
          required: true
        ssl:
          enable: true

Фрагмент кода

   @Autowired
   JavaMailSender mailSender;

   public void sendMail(String to, String subject, String content, boolean 
    isMultipart, boolean isHtml){

      MimeMessage mimeMessage = mailSender.createMimeMessage();

      JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
      mailSender.setHost(EMAIL_HOST);
      mailSender.setPort(EMAIL_PORT);
      mailSender.setUsername(EMAIL_USERNAME);
      mailSender.setPassword(EMAIL_PASSWORD);

      Properties properties = mailSender.getJavaMailProperties();
      properties.put("mail.smtp.starttls.enable", Boolean.TRUE);
      properties.put("mail.transport.protocol", "smtp");
      properties.put("mail.smtp.auth", Boolean.TRUE);
      properties.put("mail.smtp.starttls.required", Boolean.TRUE);
      properties.put("mail.smtp.ssl.enable", Boolean.FALSE);
      properties.put("mail.test-connection", Boolean.TRUE);
      properties.put("mail.debug", Boolean.TRUE);

      mailSender.setJavaMailProperties(properties);

      try {
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, isMultipart, "UTF-8");
        messageHelper.setFrom(USER_EMAIL);
        messageHelper.setTo(to);
        messageHelper.setSubject(subject);
        messageHelper.setText(content, isHtml);
        mailSender.send(mimeMessage);
      } catch (Exception ex) {
        log.warn("Email could not be sent to user '{}': {}", to, ex.getMessage());
      }
    }

Для вызовов

    @Async
    public void sendTestingMail(String mail) {
      String subject = "Test mail from Project Management System";
      String content = "<h1>Be happy, Enjoy Life...!!!</h1>";
      sendMail(mail, subject, content, false, true);
    }

Тип конфигурации электронной почты, которую вы настроили один раз и используете несколько мест, поэтому попробуйте сделать одну полную настройку.

Хорошего дня ... !!!

...