確認メールなどを送信する必要があるTomcatアプリケーションがあります。マルチパートテキスト/ htmlメールを送信するためにJavamail(mail.jar)でメール送信者をコーディングしました。 Java EEの例に基づいてコードを作成しました。ローカルサーバーでSMTP MTAを使用しています。
それは素晴らしく機能します。 Outlookでは、HTMLバージョンが表示されます。 Outlookのスパムフォルダーにドラッグすると、テキストバージョンが表示されます。だから私はそれが機能すると言っていると解釈します。
ただし、Gmailでメールを表示すると、テキストバージョンのみが表示されます。 HTMLがそこにあることは知っています(Outlookはそこから取得しました)。しかし、Gmailには表示されません... GmailでHTMLとして表示される他のシステムからのメールがたくさんあります。
誰かが私に欠けているものを示す仕様を教えてもらえますか?作成する必要がある特別なヘッダーはありますか?
ありがとう
コードは次のようになります。
Message message = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");
try {
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
multiPart.addBodyPart(htmlPart);
multiPart.addBodyPart(textPart);
message.setContent(multiPart);
if(from != null){
message.setFrom(new InternetAddress(from));
}else
message.setFrom();
if(replyto != null)
message.setReplyTo(new InternetAddress[]{new InternetAddress(replyto)});
else
message.setReplyTo(new InternetAddress[]{new InternetAddress(from)});
InternetAddress[] toAddresses = { new InternetAddress(to) };
message.setRecipients(Message.RecipientType.TO, toAddresses);
message.setSubject(subject);
message.setSentDate(new Date());
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
System.out.println("Error: "+e.getMessage());
} catch (MessagingException e) {
e.printStackTrace();
System.out.println("Error: "+e.getMessage());
} finally {
System.out.println("Email sent!");
}
解決しました!マルチパートMIME仕様によると、パートの順序が重要だと思われます。低忠実度から高忠実度の順に追加する必要があります。したがって、GMailは仕様に従って最後の部分を使用しているようです。私の場合、HTML、テキストがありました。注文をテキスト、HTMLに入れ替え、Gmailで正しくレンダリングしました...
つまり.
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
multiPart.addBodyPart(textPart); // <-- first
multiPart.addBodyPart(htmlPart); // <-- second
message.setContent(multiPart);
助けてくれてありがとう!