HTML не отображается в шаблоне электронной почты, как текст - PullRequest
0 голосов
/ 04 мая 2020

Я написал код для отправки уведомления по электронной почте, электронная почта правильно отправляется в outlook, но содержимое отображается в виде текста, а не html не удалось найти root причину, по которой код html не отображается как html в outlook

public boolean sendEmailForExpireIssue(Retrospection retrospection) throws EmailException, MessagingException {
        log.info("Sending Expiry email to Products team. txId=\"{}\"", retrospection.getTxId());        
        boolean mailSent = true;        
        try {
            JavaMailSender javaMailSender = emailConfig.getMailSender();            
            MimeMessage mimeMsg = prepareMailForExpairy(retrospection, javaMailSender);
            javaMailSender.send(mimeMsg);           
        }catch (MailException me) {
            log.error("Error occurred while sending an email ", me);
            mailSent = false;
            throw new EmailException(HttpStatus.INTERNAL_SERVER_ERROR, me.getMessage());
        }
        return mailSent;
    }

    private MimeMessage prepareMailForExpairy(Retrospection retrospection, JavaMailSender javaMailSender) throws MessagingException {

        //Session session = null;
        MimeMessage mimeMsg = javaMailSender.createMimeMessage();       
        MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, "utf-8");
        String text = createEmialTemplate(retrospection);

        MimeMultipart content = new MimeMultipart();
        MimeBodyPart html = new MimeBodyPart();
        html.setContent(text, "text/html");
        html.setHeader("MIME-Version" , "1.0" );
        html.setHeader("Content-Type" , html.getContentType() );
        content.addBodyPart(html);

        mimeMsg.setContent(content); 
        helper.setFrom(emailConfig.getSender());
        helper.setTo(emailConfig.getRecipients());
        helper.setSubject(RetrospectionConstants.EmailConstants.EXPIRY_MAIL_SUB);
        helper.setText(text);
        helper.setSentDate(new Date());     
        return mimeMsg;
    }

    private String createEmialTemplate(Retrospection retrospection) {       

        Asset asset = Asset.fromJson(retrospection.getAsset());     
        Info info = asset.getInfo();
        ErrorResponse rca = ErrorResponse.fromJson(retrospection.getErrorResponse());

        StringBuilder builder = new StringBuilder();

        if(null != info) {          
            builder.append("<html>" +
                       "<body>" +
                       "<div style='overflow-x:auto;margin-left: auto; margin-right: auto; width:50%'>" +
                       "<h2 align='left'>Expiry Summary Report</h2>"+
                       "<table align='left' cellspacing='2' style='border-width: thick; margin: 0px auto;' height=130px; width=60% border='3' runat='server'>" +
                       "<tbody>"+
                       "<tr>"+
                       "<th>Failure Asset Id</th>"+
                       "<th>Expiry Date</th>"+
                       "</tr>"+
                       "<tr>"+
                       "<td>"XYZ"</td>"+
                       "<td>"2020-04-05"</td>"+
                       "<tr>"+
                       "</tbody>"+
                       "</table>"+
                       "</div>"+
                       "</body>"+
                       "</html>");  
        }

        if(null != rca) {
            builder.append("Root Cause Analysis ")
                .append(rca.toJson());
        }
        return builder.toString();
    }

После запуска приложения после того, как письмо получило электронное письмо на outlook, шаблон письма выглядит следующим образом

<html><body><div style='overflow-x:auto;margin-left: auto; margin-right: auto; width:50%'><h2 align='left'>Expiry Summary Report</h2><table align='left' cellspacing='2' style='border-width: thick; margin: 0px auto;' height=130px; width=60% border='3' runat='server'><tbody><tr><th>Id</th><th>Expiry Date</th></tr><tr><td>xyz</td><td>2020-04-26</td><tr></tbody></table></div></body></html>

Может кто-нибудь, пожалуйста, помогите мне в этом. Какой дополнительный код я должен добавить, чтобы html мог отрендерить.

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

Пожалуйста, обратитесь к этой ссылке , чтобы понять, как работает getContentType. Таким образом, по определению он вернет «text / plain», поскольку вы не установили значение ранее. Установите значение типа содержимого, используя следующую строку кода.

html.setHeader("Content-Type" , "text/html");

Надеюсь, это поможет.

0 голосов
/ 04 мая 2020

Метод .setText () в MimeMessageHelper принимает 2 аргумента: сам текст и логическое значение, если текст html.

Следовательно, вам нужно изменить строку

helper.setText(text);

на

helper.setText(html, true);

в вашем методе prepareMailForExpairy.

0 голосов
/ 04 мая 2020

Вы можете пропустить часть, где вы установили MimeBodyPart. Сразу установите свой контент с Mimemessage вместе с типом контента. Это сработало для меня:

message.setContent(htmlString,"text/html");
...