3

我有这个代码来发送电子邮件:

public static void sendHtmlTextWithPlainTextAlternative(final String to,
    final String from, final String subject, final String plainText,
    final String htmlText) throws MessagingException {

    final HtmlEmail email = new HtmlEmail();
    email.setHostName(SMTP);
    try {
        email.addTo(getStringAddresses(to));
        email.setFrom(from);
        email.setSubject(subject);
        email.setHtmlMsg("<html><head></head><body><p>Hello World!</p></body></html>");
        email.setTextMsg("Hello World!");
        email.send();
    } catch (final EmailException e) {
        e.printStackTrace();
    }
}

private static String[] getStringAddresses(final String to) {
    return to.split(" |,|;|\\r?\\n|\\r");
}

但是我在电子邮件客户端(Outlook 2010)中得到的只是纯文本消息,我可以在其中看到 html 标记和替代纯文本或空白的富文本消息(Outlook 2002)。

这是摘录

------=_Part_0_756354128.1364993577885
Content-Type: multipart/alternative; boundary="----=_Part_1_48519531.1364993577890"

------=_Part_1_48519531.1364993577890
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello World!
------=_Part_1_48519531.1364993577890
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<html><head></head><body><p>Hello World!</p></body></html>
------=_Part_1_48519531.1364993577890--

------=_Part_0_756354128.1364993577885--

根据一位 Exchange Server 管理员的说法,消息的开头应该包含类似这样的内容

0 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>

Content-Type: multipart/mixed; boundary="----=_Part_1_933059347.1364987366297"

但它是这样来的(摘录):

250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>

This is the content preamble.
------=_Part_1_933059347.1364987366297
Content-Type: multipart/alternative; boundary="----=_Part_0_1905186593.1364987366295"

电子邮件带有一个空的主题和一个空的收件人列表。什么可能导致这种奇怪的行为?

4

2 回答 2

1

在找出要寻找的解决方案之后非常简单,我必须感谢 Cedric Champeau。这是通过另一个 maven 依赖项引入的与 geronimo-javamail 的冲突。我所要做的就是排除这种依赖:Apache CXF + Maven + Javamail + Log4J(更新)

于 2013-04-04T07:07:08.787 回答
0

我看到你在使用 apache commons?

尝试删除头部和身体标签

所以你会有

    email.setHtmlMsg("<html><p>Hello World!</p></html>");

另一件不应该有所作为但您可以尝试的事情是为 email.setHostName("mail.myserver.com"); 设置正确的值。

参考commons eml 用户指南

并将邮件发送到 gmail 帐户,也许服务器设置为仅允许文本及其删除 html?您可以从 gmail(富格式)发送相同的邮件 id html 吗?

于 2013-04-03T13:29:52.207 回答