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