如何使用JavaMail发送HTML邮件?

3
我已经尝试了这个链接中的字符集建议:https://dev59.com/8G445IYBdhLWcg3wDV4P,但是邮件显示的是messageText的确切值...没有呈现任何HTML。以下是我的代码。
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

String messageText = "<br/>THIS IS A TEST...<br/>!!!";

Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true"); 
props.setProperty("mail.smtp.ssl.enable", "true");

Session mailSession = Session.getInstance(props, null);
mailSession.setDebug(true);
Transport transport = mailSession.getTransport();

MimeMessage message = new MimeMessage(mailSession);
message.setSubject(messageSubject);
message.setContent(messageText, "text/html; charset=utf-8");

Address[] fromAddress = InternetAddress.parse ( "pleasedonotreplymessage@[removed]" ) ; 
message.addFrom( fromAddress );

message.addRecipient(Message.RecipientType.TO, new InternetAddress(toAddress));

transport.connect("[removed]", "", "");
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
transport.close();

我希望不必安装其他工具,因为这将需要对我的当前代码进行完全重新设计。


如果有可用的经过测试和可信的框架,最好使用它们。除非你想学习如何自己编写这样的框架 :-) - Maciej Ziarko
但是JavaMail API非常核心,而且被广泛使用。而且不需要安装、配置或设置其他工具。对吧? - adam
3个回答

2

这已经经过测试并确认可行。

虽然有更加优雅的HTML电子邮件结构,能够被更广泛的邮件客户端支持,但是对于快速解决方案,这个方法在我测试过的读者中可行(Outlook、连接到Exchange的Android邮件客户端和Gmail)。

public static void sendHtmlEmail(String server, String from, String to, String cc, String subject, String htmlBody) throws MessagingException {
    Properties props = new Properties();
    props.setProperty("mail.smtp.host", server);
    Session session = Session.getInstance(props);

    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(from);
    msg.setRecipients(RecipientType.TO, to);
    msg.setRecipients(RecipientType.CC, cc);
    msg.setSubject(subject);
    msg.setSentDate(new Date());

    MimeMultipart mp = new MimeMultipart();
    MimeBodyPart part = new MimeBodyPart();
    part.setText(htmlBody);
    mp.addBodyPart(part);
    msg.setContent(mp);

    // Content type has to be set after the message is put together
    // Then saveChanges() must be called for it to take effect
    part.setHeader("Content-Type", "text/html");
    msg.saveChanges();

    Transport.send(msg);
}

1

0

我不是已经在使用这个了吗?你提供的链接使用了 "Message msg = new MimeMessage(mailSession);" 这正是我所用的。它还使用了 "Transport transport = mailSession.getTransport();" 而我也完全有这个...? - adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接