java SMTPMessage not render textbody

145 Views Asked by At

I've got problem with displaying textBody in sent message by SMTPTransport.sendMessage. I've checked topics and thought that it can be problem when I tried to create SMTPMessage. I put in SMTPMessage simple text by variable m.getTextContent() and htmlText. Result is the email message that display only htmlText. Here is code:

    public SMTPMessage createSMTPMessage(EMailMessage m) throws MessagingException, UnsupportedEncodingException {
    Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
    headers.putAll(m.getHeaders());

    // Create a default MimeMessage object.
    SMTPMessage message = new UniMimeMessage(session); // UniMimeMessage extends SMTPMessage

    // Recipient's email ID needs to be mentioned.
    String to = m.getReceiver();
    // Set To: header field of the header.
    if (to != null && to.length() != 0) {
        InternetAddress[] recips = InternetAddress.parse(to, false);
        if (recips.length > 0) {
            message.addRecipient(javax.mail.Message.RecipientType.TO,
                    new InternetAddress(recips[0].getAddress(), recips[0].getPersonal(), charset));
        }
    } else {
        to = headers.get("To");
        if (to != null && to.length() != 0) {

            InternetAddress[] recips = InternetAddress.parse(to, false);
            if (recips.length > 0) {
                message.addRecipient(javax.mail.Message.RecipientType.TO,
                        new InternetAddress(recips[0].getAddress(), recips[0].getPersonal(), charset));
            }

        }
    }
    //remove TO header in order not to add it twice
    headers.remove("To");

    // Set Subject
    String subject = headers.get("Subject");
    message.setSubject(subject,  charset);
    // remove Subject header in order not to add it twice
    headers.remove("Subject");

    for (String key : headers.keySet())
        message.addHeader(key, headers.get(key));

    String returnPath = headers.get("Return-Path");
    if (returnPath != null && returnPath.length() > 0)
        message.setEnvelopeFrom(returnPath);

    Multipart multipart = new MimeMultipart();

    Multipart innerMultipart = new MimeMultipart("alternative");

    MimeBodyPart messageBodyPart = new MimeBodyPart();


    if (m.getTextContent() != null) {
        messageBodyPart.setContent(m.getTextContent(), "text/plain; charset=" + charset);
        innerMultipart.addBodyPart(messageBodyPart);
    }
    messageBodyPart = new MimeBodyPart();

    String htmlText = m.getPreparedText();
    if (htmlText != null) {
        messageBodyPart.setContent(htmlText, "text/html; charset=" + charset);
        innerMultipart.addBodyPart(messageBodyPart);
    }


    messageBodyPart = new MimeBodyPart();
    messageBodyPart.setContent(innerMultipart);
    multipart.addBodyPart(messageBodyPart);

    //fill mimes
    List<MimeBodyPart> parts = m.getMimeBodyParts();
    for (MimeBodyPart part : parts)
        multipart.addBodyPart(part);


    message.setContent(multipart);

    return message;
}

Does any idea why? Thanks

0

There are 0 best solutions below