How to send html email to outlook from Java

前端 未结 8 2017
忘掉有多难
忘掉有多难 2021-02-04 04:06

I\'m trying to send an email in html format using JavaMail but it always seems to only display as a text email in Outlook.

Here is my code:

try 
{
    P         


        
相关标签:
8条回答
  • 2021-02-04 04:34

    I used the following code:

    mimeBodyPart1.setDataHandler(new DataHandler(new ByteArrayDataSource(messageBody, "text/html; charset=utf-8")));
    multiPart.addBodyPart(mimeBodyPart1);
    message.setContent(multiPart, "text/html; charset=utf-8");
    

    Now, Outlook displays in html format.

    0 讨论(0)
  • 2021-02-04 04:34

    workaroung solution solved outlook 2003: This message uses a character set that is not supported by the Internet Service. doesn't display correctly.

    It could be due to the encoding. Most html pages use iso-8859-1 not cp-1252 try changing

    For example, your code is:

    message.setContent(sBuffer.toString(), "text/html");
    

    Change this to:

    message.setContent(new String(sBuffer.toString().getBytes(), "iso-8859-1"), "text/html; charset=\"iso-8859-1\"");
    

    This throws a new checked exception : java.io.UnsupportedEncodingException so you need to declare it to be thrown or catch it. iso-8859-1 is supported so, the exception will never be thrown unless something gets corrupted with your rt.jar.

    Regards, Javeed javeed.mca@gmail.com

    0 讨论(0)
  • 2021-02-04 04:44

    In addition to removing the html.setHeader("Content-Type", html.getContentType()) call as suggest already, I'd replace the line:

    MimeMultipart content = new MimeMultipart();
    

    …with:

    MimeMultipart content = new MimeMultiPart("alternative");
    

    …and removing the line:

    message.setHeader("Content-Type" , content.getContentType() );
    

    The default MimeMultiPart constructor could be causing problems with a "multipart/mixed" content-type.

    When using multipart/alternative, the alternatives are ordered by how faithful they are to the original, with the best rendition last. However, clients usually give users an option to display plain text, even when HTML is present. Are you sure that this option is not enabled in Outlook? How do other user agents, like Thunderbird, or GMail, treat your messages?

    Also, ensure that the HTML is well-formed. I'd validate the HTML content with the W3 validation service, and possibly save it into a file and view it with different versions of IE too. Maybe there's a flaw there causing Outlook to fall back to plain text.

    0 讨论(0)
  • 2021-02-04 04:50

    You should look at the source of the received message: is the Content-Type of the message multipart/alternative?

    0 讨论(0)
  • 2021-02-04 04:53

    After a lot of investigation, I've been able to make some significant progress.

    Firstly, instead of using JavaMail directly, I recommend using the Jakarta Commons Email library. This really simplifies the issue a lot!

    The code is now:

    HtmlEmail email = new HtmlEmail();
    
    email.setHostName(mailserver);
    email.setAuthentication(username, password);
    email.setSmtpPort(port);
    email.setFrom(fromEmail);
    email.addTo(to);
    email.setSubject(subject);
    
    email.setTextMsg(textBody);
    email.setHtmlMsg(htmlBody);
    
    email.setDebug(true);
    
    email.send();
    

    Talk about simple.

    However, there is still an issue. The html version of the email works great in Gmail, Hotmail, etc. But it still won't correctly display in Outlook. It always wants to display the text version and I'm not sure why. I suspect it's a setting in Outlook, but I can't find it...

    0 讨论(0)
  • 2021-02-04 04:53

    Change this To:

    message.setContent(new String(sBuffer.toString().getBytes(), "iso-8859-1"), "text/html; charset=\"iso-8859-1\"");
    

    The content char set need to be set, I don't see why the content itself. Should rather be:

    message.setContent(sBuffer.toString(), "text/html;charset=iso-8859-1");
    
    0 讨论(0)
提交回复
热议问题