【发布时间】:2013-01-10 19:12:24
【问题描述】:
我使用 JavaMail 创建了一个应用程序,它读取电子邮件并获取其content。内容将以 HTML 格式获取。此内容将被分析,然后转发到另一个电子邮件地址。
我已经在 Chrome、Mozilla、Outlook、Office 365、Thunderbird 和 Internet Explorer 中测试了电子邮件的布局。一切都很好,当然,除了 IE。
我制作了一些屏幕截图,一个在 Chrome 中,另一个在 Internet Explorer 中,都来自同一个邮件客户端 (Office 365)。
Chrome 中的好电子邮件
错误的 IE 电子邮件
我整理了一封multipart 电子邮件,一部分用于内容,另一部分用于附件。这是我正在使用的代码:
public void SentTest(String messageContent) throws IOException, ParseException, NoSuchProviderException {
//Only get text between HTML tags
Pattern pattern = Pattern.compile(".*?<html.*?>(.*?)</html>.*?");
Matcher matcher = pattern.matcher(messageContent);
if (matcher.matches()) {
messageContent= matcher.group(1);
}
messageContent= Jsoup.clean(messageContent, Whitelist.relaxed());
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smpt.host", "pod51010.outlook.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(props, null);
try {
transport = session.getTransport("smtp");
try {
transport.connect("host", "email", "password");
} catch (MessagingException ex) {
ex.printStackTrace();
}
} catch (NoSuchProviderException ex) {
ex.printStackTrace();
}
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("email"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("testemail"));
message.setSubject("Test");
MimeBodyPart testMessagePart = new MimeBodyPart();
testMessagePart.setText(inhoudBericht, "ISO-8859-1", "html");
testMessagePart.setHeader("Content-Type", "text/html; charset=\"iso-8859-1\"");
testMessagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
testMessagePart.setHeader("MIME-Version", "1.0");
Multipart multipart = new MimeMultipart("multipart");
multipart.addBodyPart(testMessagePart);
//Set the content of the Message
message.setHeader("", "");
message.setContent(multipart, "html; charset=\"iso-8859-1\"");
try {
transport.sendMessage(message, message.getAllRecipients());
} catch (Exception ex) {
ex.printStackTrace();
}
transport.close();
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
我的问题是:如何使电子邮件的布局灵活,使其适用于所有浏览器?
编辑
在添加<html> 标记和Doctype 并从HTML 中删除width 属性后,布局会“正确”显示,但当然还有另一个问题:
如您所见,它现在是蓝色的,并且显示了表格轮廓。有什么办法摆脱这个吗?
编辑
通过删除bgcolor 标签摆脱了蓝色背景。现在唯一的问题是删除表格轮廓。
【问题讨论】:
-
嗯,浏览器是不同的......另外,请注意,您还必须检查邮件客户端中的怪癖 - 例如,Outlook 有很多“特色”,它喜欢什么,以及它没有什么......此外,您发布的代码不相关 - 内容本身就是重要的。发布那个,在这个主题上有经验的人可以发现这个问题。我建议你尽可能使用最简单的方法:没有灵活性,所有东西都是固定的高度和宽度,没有花哨的 CSS,基本上:基本的基础......即使这样,你也会有一些不愉快的惊喜......
-
感谢您的评论,我忘了在我的问题中添加两个屏幕截图来自同一个客户端(Office 365),只是在不同的浏览器中。
-
HTML 是什么样的?
-
哦,我错过了内容不是您创建的事实。那么你真的不能做太多......确切的问题似乎是某种与 HTML 表格相关的怪癖。也许我会尝试从任何 css 中清除源 HTML - 但这可能会导致错误的布局,可能至少在所有浏览器上同样错误,即...
-
@MathiasSchwarz 将其上传到 pastebin:pastebin.com/XYCM277w 这是从使用 JavaMail 的电子邮件中获取的 HTML 内容。我没有更改任何内容,只是删除了标题,因为它们显示为电子邮件内容。
标签: java html internet-explorer layout jakarta-mail