如何发送包含纯文本和 HTML 文本的邮件,以便每个邮件阅读器都可以选择适合它的格式?
Posted
技术标签:
【中文标题】如何发送包含纯文本和 HTML 文本的邮件,以便每个邮件阅读器都可以选择适合它的格式?【英文标题】:How do I send mail with both plain text as well as HTML text so that each mail reader can choose the format appropriate for it? 【发布时间】:2011-10-09 00:40:34 【问题描述】:来自http://www.oracle.com/technetwork/java/faq-135477.html#sendmpa:
您需要发送 MIME 多部分/替代消息。你 构造这样的消息基本上与构造消息的方式相同 多部分/混合消息,使用构造的 MimeMultipart 对象 使用新的 MimeMultipart("alternative")。然后插入文本/纯文本 正文部分作为 multpart 中的第一部分并插入 text/html 身体部分作为多部分中的第二部分。你需要 自己构建plain和html部分以获得适当的 内容。有关此类消息结构的详细信息,请参阅 RFC2046。
有人可以给我看一些示例代码吗?
【问题讨论】:
【参考方案1】:这是我自己的代码的一部分:
final Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(senderAddress, senderDisplayName));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(m.getRecipient(), m.getRecipientDisplayName()));
msg.setSubject(m.getSubject());
// Unformatted text version
final MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(m.getText(), "text/plain");
// HTML version
final MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(m.getHtml(), "text/html");
// Create the Multipart. Add BodyParts to it.
final Multipart mp = new MimeMultipart("alternative");
mp.addBodyPart(textPart);
mp.addBodyPart(htmlPart);
// Set Multipart as the message's content
msg.setContent(mp);
LOGGER.log(Level.FINEST, "Sending email 0", m);
Transport.send(msg);
m
是我自己的类的一个实例。
【讨论】:
请注意,将 textPart 和 htmlPart 添加到 MultiPart 实例的顺序很重要。如果您以相反的方式添加它们,即使 html 可用(至少在 gmail 上),纯文本部分也会显示给用户。以上是关于如何发送包含纯文本和 HTML 文本的邮件,以便每个邮件阅读器都可以选择适合它的格式?的主要内容,如果未能解决你的问题,请参考以下文章
PhpMailer 发送的电子邮件内容仅显示纯文本,不包含 HTML 样式