use of javax.mail.internet.MimeBodyPart in project camel by apache.
the class MailBinding method addBodyToMultipart.
protected void addBodyToMultipart(MailConfiguration configuration, MimeMultipart activeMultipart, Exchange exchange) throws MessagingException, IOException {
BodyPart bodyMessage = new MimeBodyPart();
populateContentOnBodyPart(bodyMessage, configuration, exchange);
activeMultipart.addBodyPart(bodyMessage);
}
use of javax.mail.internet.MimeBodyPart in project camel by apache.
the class MailBinding method addAttachmentsToMultipart.
protected void addAttachmentsToMultipart(MimeMultipart multipart, String partDisposition, AttachmentsContentTransferEncodingResolver encodingResolver, Exchange exchange) throws MessagingException {
LOG.trace("Adding attachments +++ start +++");
int i = 0;
for (Map.Entry<String, Attachment> entry : exchange.getIn().getAttachmentObjects().entrySet()) {
String attachmentFilename = entry.getKey();
Attachment attachment = entry.getValue();
if (LOG.isTraceEnabled()) {
LOG.trace("Attachment #{}: Disposition: {}", i, partDisposition);
LOG.trace("Attachment #{}: DataHandler: {}", i, attachment.getDataHandler());
LOG.trace("Attachment #{}: FileName: {}", i, attachmentFilename);
}
if (attachment != null) {
if (shouldAddAttachment(exchange, attachmentFilename, attachment.getDataHandler())) {
// Create another body part
BodyPart messageBodyPart = new MimeBodyPart();
// Set the data handler to the attachment
messageBodyPart.setDataHandler(attachment.getDataHandler());
// Set headers to the attachment
for (String headerName : attachment.getHeaderNames()) {
List<String> values = attachment.getHeaderAsList(headerName);
for (String value : values) {
messageBodyPart.setHeader(headerName, value);
}
}
if (attachmentFilename.toLowerCase().startsWith("cid:")) {
// add a Content-ID header to the attachment
// must use angle brackets according to RFC: http://www.ietf.org/rfc/rfc2392.txt
messageBodyPart.addHeader("Content-ID", "<" + attachmentFilename.substring(4) + ">");
// Set the filename without the cid
messageBodyPart.setFileName(attachmentFilename.substring(4));
} else {
// Set the filename
messageBodyPart.setFileName(attachmentFilename);
}
LOG.trace("Attachment #" + i + ": ContentType: " + messageBodyPart.getContentType());
if (contentTypeResolver != null) {
String contentType = contentTypeResolver.resolveContentType(attachmentFilename);
LOG.trace("Attachment #" + i + ": Using content type resolver: " + contentTypeResolver + " resolved content type as: " + contentType);
if (contentType != null) {
String value = contentType + "; name=" + attachmentFilename;
messageBodyPart.setHeader("Content-Type", value);
LOG.trace("Attachment #" + i + ": ContentType: " + messageBodyPart.getContentType());
}
}
// set Content-Transfer-Encoding using resolver if possible
resolveContentTransferEncoding(encodingResolver, i, messageBodyPart);
// Set Disposition
messageBodyPart.setDisposition(partDisposition);
// Add part to multipart
multipart.addBodyPart(messageBodyPart);
} else {
LOG.trace("shouldAddAttachment: false");
}
} else {
LOG.warn("Cannot add attachment: " + attachmentFilename + " as DataHandler is null");
}
i++;
}
LOG.trace("Adding attachments +++ done +++");
}
use of javax.mail.internet.MimeBodyPart in project camel by apache.
the class MailBinding method createMultipartAlternativeMessage.
protected void createMultipartAlternativeMessage(MimeMessage mimeMessage, MailConfiguration configuration, Exchange exchange) throws MessagingException, IOException {
MimeMultipart multipartAlternative = new MimeMultipart("alternative");
mimeMessage.setContent(multipartAlternative);
MimeBodyPart plainText = new MimeBodyPart();
plainText.setText(getAlternativeBody(configuration, exchange), determineCharSet(configuration, exchange));
// remove the header with the alternative mail now that we got it
// otherwise it might end up twice in the mail reader
exchange.getIn().removeHeader(configuration.getAlternativeBodyHeader());
multipartAlternative.addBodyPart(plainText);
// if there are no attachments, add the body to the same mulitpart message
if (!exchange.getIn().hasAttachments()) {
addBodyToMultipart(configuration, multipartAlternative, exchange);
} else {
// treat them as normal. It will append a multipart-mixed with the attachments and the body text
if (!configuration.isUseInlineAttachments()) {
BodyPart mixedAttachments = new MimeBodyPart();
mixedAttachments.setContent(createMixedMultipartAttachments(configuration, exchange));
multipartAlternative.addBodyPart(mixedAttachments);
} else {
// if the attachments are set to be inline, attach them as inline attachments
MimeMultipart multipartRelated = new MimeMultipart("related");
BodyPart related = new MimeBodyPart();
related.setContent(multipartRelated);
multipartAlternative.addBodyPart(related);
addBodyToMultipart(configuration, multipartRelated, exchange);
AttachmentsContentTransferEncodingResolver resolver = configuration.getAttachmentsContentTransferEncodingResolver();
addAttachmentsToMultipart(multipartRelated, Part.INLINE, resolver, exchange);
}
}
}
use of javax.mail.internet.MimeBodyPart in project Openfire by igniterealtime.
the class EmailService method sendMessage.
/**
* Sends a message, specifying all of its fields.<p>
*
* To have more advanced control over the message sent, use the
* {@link #sendMessage(MimeMessage)} method.<p>
*
* Both a plain text and html body can be specified. If one of the values is null,
* only the other body type is sent. If both body values are set, a multi-part
* message will be sent. If parts of the message are invalid (ie, the toEmail is null)
* the message won't be sent.
*
* @param toName the name of the recipient of this email.
* @param toEmail the email address of the recipient of this email.
* @param fromName the name of the sender of this email.
* @param fromEmail the email address of the sender of this email.
* @param subject the subject of the email.
* @param textBody plain text body of the email, which can be <tt>null</tt> if the
* html body is not null.
* @param htmlBody html body of the email, which can be <tt>null</tt> if the text body
* is not null.
*/
public void sendMessage(String toName, String toEmail, String fromName, String fromEmail, String subject, String textBody, String htmlBody) {
// Check for errors in the given fields:
if (toEmail == null || fromEmail == null || subject == null || (textBody == null && htmlBody == null)) {
Log.error("Error sending email: Invalid fields: " + ((toEmail == null) ? "toEmail " : "") + ((fromEmail == null) ? "fromEmail " : "") + ((subject == null) ? "subject " : "") + ((textBody == null && htmlBody == null) ? "textBody or htmlBody " : ""));
} else {
try {
String encoding = MimeUtility.mimeCharset("UTF-8");
MimeMessage message = createMimeMessage();
Address to;
Address from;
if (toName != null) {
to = new InternetAddress(toEmail, toName, encoding);
} else {
to = new InternetAddress(toEmail, "", encoding);
}
if (fromName != null) {
from = new InternetAddress(fromEmail, fromName, encoding);
} else {
from = new InternetAddress(fromEmail, "", encoding);
}
// Set the date of the message to be the current date
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", java.util.Locale.US);
format.setTimeZone(JiveGlobals.getTimeZone());
message.setHeader("Date", format.format(new Date()));
message.setHeader("Content-Transfer-Encoding", "8bit");
message.setRecipient(Message.RecipientType.TO, to);
message.setFrom(from);
message.setSubject(StringUtils.replace(subject, "\n", ""), encoding);
// Create HTML, plain-text, or combination message
if (textBody != null && htmlBody != null) {
MimeMultipart content = new MimeMultipart("alternative");
// Plain-text
MimeBodyPart text = new MimeBodyPart();
text.setText(textBody, encoding);
text.setDisposition(Part.INLINE);
content.addBodyPart(text);
// HTML
MimeBodyPart html = new MimeBodyPart();
html.setContent(htmlBody, "text/html; charset=UTF-8");
html.setDisposition(Part.INLINE);
html.setHeader("Content-Transfer-Encoding", "8bit");
content.addBodyPart(html);
// Add multipart to message.
message.setContent(content);
message.setDisposition(Part.INLINE);
sendMessage(message);
} else if (textBody != null) {
MimeBodyPart bPart = new MimeBodyPart();
bPart.setText(textBody, encoding);
bPart.setDisposition(Part.INLINE);
bPart.setHeader("Content-Transfer-Encoding", "8bit");
MimeMultipart mPart = new MimeMultipart();
mPart.addBodyPart(bPart);
message.setContent(mPart);
message.setDisposition(Part.INLINE);
// Add the message to the send list
sendMessage(message);
} else if (htmlBody != null) {
MimeBodyPart bPart = new MimeBodyPart();
bPart.setContent(htmlBody, "text/html; charset=UTF-8");
bPart.setDisposition(Part.INLINE);
bPart.setHeader("Content-Transfer-Encoding", "8bit");
MimeMultipart mPart = new MimeMultipart();
mPart.addBodyPart(bPart);
message.setContent(mPart);
message.setDisposition(Part.INLINE);
// Add the message to the send list
sendMessage(message);
}
} catch (Exception e) {
Log.error(e.getMessage(), e);
}
}
}
use of javax.mail.internet.MimeBodyPart in project Openfire by igniterealtime.
the class SendMail method sendMessage.
public boolean sendMessage(String message, String host, String port, String username, String password) {
boolean ok = false;
String uidString = "";
try {
// Set the email properties necessary to send email
final Properties props = System.getProperties();
props.put("mail.smtp.host", host);
props.put("mail.transport.protocol", "smtp");
props.put("mail.server", host);
if (ModelUtil.hasLength(port)) {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", port);
}
Session sess;
if (ModelUtil.hasLength(password) && ModelUtil.hasLength(username)) {
sess = Session.getInstance(props, new MailAuthentication(username, password));
} else {
sess = Session.getDefaultInstance(props, null);
}
Message msg = new MimeMessage(sess);
StringTokenizer toST = new StringTokenizer(toField, ",");
if (toST.countTokens() > 1) {
InternetAddress[] address = new InternetAddress[toST.countTokens()];
int addrIndex = 0;
String addrString = "";
while (toST.hasMoreTokens()) {
addrString = toST.nextToken();
address[addrIndex] = (new InternetAddress(addrString));
addrIndex = addrIndex + 1;
}
msg.setRecipients(Message.RecipientType.TO, address);
} else {
InternetAddress[] address = { new InternetAddress(toField) };
msg.setRecipients(Message.RecipientType.TO, address);
}
InternetAddress from = new InternetAddress(myAddress);
msg.setFrom(from);
msg.setSubject(subjectField);
UID msgUID = new UID();
uidString = msgUID.toString();
msg.setHeader("X-Mailer", uidString);
msg.setSentDate(new Date());
MimeMultipart mp = new MimeMultipart();
// create body part for textarea
MimeBodyPart mbp1 = new MimeBodyPart();
if (getCustomerName() != null) {
messageText = "From: " + getCustomerName() + "\n" + messageText;
}
if (isHTML) {
mbp1.setContent(messageText, "text/html");
} else {
mbp1.setContent(messageText, "text/plain");
}
mp.addBodyPart(mbp1);
try {
if (!isHTML) {
msg.setContent(messageText, "text/plain");
} else {
msg.setContent(messageText, "text/html");
}
Transport.send(msg);
ok = true;
} catch (SendFailedException sfe) {
Log.warn("Could not connect to SMTP server.");
}
} catch (Exception eq) {
Log.warn("Could not connect to SMTP server.");
}
return ok;
}
Aggregations