rox*_*xel 3 java email spring mime jakarta-mail
我想准备简单的HTML电子邮件与替代纯文本版本.我不需要任何附件或内联元素.
默认情况下我使用:
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
我得到MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED模式.
我的电子邮件内容正如下所示:
Content-Type: multipart/mixed; 
    boundary="----=_Part_8_21489995.1282317482209"
------=_Part_8_21489996.1282317482209
Content-Type: multipart/related; 
    boundary="----=_Part_9_21489996.1282317482209"
------=_Part_9_21489996.1282317482209
Content-Type: multipart/alternative; 
    boundary="----=_Part_10_2458205.1282317482209"
------=_Part_10_2458205.1282317482209
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Simple newsletter.
------=_Part_10_2458205.1282317482209
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
    <head>
        <title>Simple newsletter</title>
    <head>
    <body>
        <p>Simple newsletter.</p>
    </body>
<html>
------=_Part_10_2458205.1282317482209--
------=_Part_9_21489996.1282317482209--
------=_Part_8_21489995.1282317482209--
Run Code Online (Sandbox Code Playgroud)
我能做些什么来摆脱混合和相关的边界?
理想的解决方案是MimeMessageHelper.MULTIPART_MODE_ALTERNATIVE模式,但它不可用.
由于垃圾邮件检查器问题,我希望使用替代方法发送 html 电子邮件,但似乎 spring 只是不提供简单的 MimeMessageHelper.MULTIPART_MODE_ALTERNATIVE。但是使用 MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED 让我的电子邮件到达目的地。
如果您仍然想摆脱混合和相关边界,您需要更多地控制 MIME 消息的组装方式,您可以创建 MimeMessagePreparator 接口的实现并将其传递给 JavaMailSender.send() 方法代替 MimeMessage .
  sender.send(new MessagePreparator());
Run Code Online (Sandbox Code Playgroud)
private class MessagePreparator 实现了 MimeMessagePreparator { 
       public void prepare(MimeMessage msg) throws Exception { 
           // 设置头部细节
           msg.addFrom(InternetAddress.parse(from)); 
           msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
           msg.setSubject(主题); 
                                                       
            // 创建包装多部分/替代部分
            MimeMultipart ma = new MimeMultipart("alternative"); 
            msg.setContent(ma); 
            // 创建纯文本
            BodyPart plainText = new MimeBodyPart(); 
            plainText.setText("这是邮件的纯文本版本。"); 
            ma.addBodyPart(纯文本);
            // 创建 html 部分
            BodyPart html = new MimeBodyPart(); 
            html.setContent( 
                    "<html><head></head><body> 
<h1>这是邮件的 HTML 版本。" 
                             + "</h1></body></html>", "text/ html"); 
            ma.addBodyPart(html); 
        } 
    } 
}
将 BodyPart 实例添加到 MimeMultipart 的顺序很重要,您应该最后添加具有最可取的消息格式的 BodyPart。
这是摘自 Pro Spring 2.5 第 13 章 - § 发送带有纯文本替代的 HTML 消息;APRESS ISBN-13 (pbk): 978-1-59059-921-1
还有更简单的方法:
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
messageHelper.setFrom("your@mail.com");
messageHelper.setTo("target@mail.com");
messageHelper.setSubject("Spring mail test");
messageHelper.setText("Plain message", "<html><body><h2>html message</h2></body></html>");
javaMailSender.send(message);
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           10441 次  |  
        
|   最近记录:  |