use of javax.mail.Header in project camel by apache.
the class DefaultMailUidGenerator method generateMessageHash.
public String generateMessageHash(Message message) {
LOG.trace("generateMessageHash for msg: {}", message);
String uid = null;
// create an UID based on message headers on the message, that ought to be unique
StringBuilder buffer = new StringBuilder();
try {
Enumeration<?> it = message.getAllHeaders();
while (it.hasMoreElements()) {
Header header = (Header) it.nextElement();
buffer.append(header.getName()).append("=").append(header.getValue()).append("\n");
}
if (buffer.length() > 0) {
LOG.trace("Generating UID from the following:\n {}", buffer);
uid = UUID.nameUUIDFromBytes(buffer.toString().getBytes()).toString();
}
} catch (MessagingException e) {
LOG.warn("Cannot read headers from mail message. This exception will be ignored.", e);
}
return uid;
}
use of javax.mail.Header in project camel by apache.
the class MailBinding method extractAttachmentsFromMultipart.
protected void extractAttachmentsFromMultipart(Multipart mp, Map<String, Attachment> map) throws MessagingException, IOException {
for (int i = 0; i < mp.getCount(); i++) {
Part part = mp.getBodyPart(i);
LOG.trace("Part #" + i + ": " + part);
if (part.isMimeType("multipart/*")) {
LOG.trace("Part #" + i + ": is mimetype: multipart/*");
extractAttachmentsFromMultipart((Multipart) part.getContent(), map);
} else {
String disposition = part.getDisposition();
String fileName = part.getFileName();
if (LOG.isTraceEnabled()) {
LOG.trace("Part #{}: Disposition: {}", i, disposition);
LOG.trace("Part #{}: Description: {}", i, part.getDescription());
LOG.trace("Part #{}: ContentType: {}", i, part.getContentType());
LOG.trace("Part #{}: FileName: {}", i, fileName);
LOG.trace("Part #{}: Size: {}", i, part.getSize());
LOG.trace("Part #{}: LineCount: {}", i, part.getLineCount());
}
if (validDisposition(disposition, fileName) || fileName != null) {
LOG.debug("Mail contains file attachment: {}", fileName);
if (!map.containsKey(fileName)) {
// Parts marked with a disposition of Part.ATTACHMENT are clearly attachments
DefaultAttachment camelAttachment = new DefaultAttachment(part.getDataHandler());
@SuppressWarnings("unchecked") Enumeration<Header> headers = part.getAllHeaders();
while (headers.hasMoreElements()) {
Header header = headers.nextElement();
camelAttachment.addHeader(header.getName(), header.getValue());
}
map.put(fileName, camelAttachment);
} else {
LOG.warn("Cannot extract duplicate file attachment: {}.", fileName);
}
}
}
}
}
use of javax.mail.Header in project camel by apache.
the class MailBinding method extractHeadersFromMail.
protected Map<String, Object> extractHeadersFromMail(Message mailMessage, Exchange exchange) throws MessagingException, IOException {
Map<String, Object> answer = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER);
Enumeration<?> names = mailMessage.getAllHeaders();
while (names.hasMoreElements()) {
Header header = (Header) names.nextElement();
String value = header.getValue();
if (headerFilterStrategy != null && !headerFilterStrategy.applyFilterToExternalHeaders(header.getName(), value, exchange)) {
CollectionHelper.appendValue(answer, header.getName(), value);
}
}
// if the message is a multipart message, do not set the content type to multipart/*
if (((MailEndpoint) exchange.getFromEndpoint()).getConfiguration().isMapMailMessage()) {
Object content = mailMessage.getContent();
if (content instanceof MimeMultipart) {
MimeMultipart multipart = (MimeMultipart) content;
int size = multipart.getCount();
for (int i = 0; i < size; i++) {
BodyPart part = multipart.getBodyPart(i);
content = part.getContent();
// in case of nested multiparts iterate into them
while (content instanceof MimeMultipart) {
if (multipart.getCount() < 1) {
break;
}
part = ((MimeMultipart) content).getBodyPart(0);
content = part.getContent();
}
if (part.getContentType().toLowerCase().startsWith("text")) {
answer.put(Exchange.CONTENT_TYPE, part.getContentType());
break;
}
}
}
}
return answer;
}
use of javax.mail.Header in project camel by apache.
the class MultipleDestinationConsumeTest method testSendAndReceiveMails.
@Test
public void testSendAndReceiveMails() throws Exception {
Mailbox.clearAll();
MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
resultEndpoint.expectedMinimumMessageCount(1);
MimeMessage message = new MimeMessage(mailSession);
message.setText(body);
message.setRecipients(Message.RecipientType.TO, new Address[] { new InternetAddress("james@localhost"), new InternetAddress("bar@localhost") });
Transport.send(message);
// lets test the receive worked
resultEndpoint.assertIsSatisfied(100000);
Exchange exchange = resultEndpoint.getReceivedExchanges().get(0);
org.apache.camel.Message in = exchange.getIn();
assertNotNull("Should have headers", in.getHeaders());
MailMessage msg = (MailMessage) exchange.getIn();
Message inMessage = msg != null ? msg.getMessage() : null;
assertNotNull("In message has no JavaMail message!", inMessage);
String text = in.getBody(String.class);
assertEquals("mail body", body, text);
// need to use iterator as some mail impl returns String[] and others a single String with comma as separator
// so we let Camel create an iterator so we can use the same code for the test
Object to = in.getHeader("TO");
Iterator<String> it = CastUtils.cast(ObjectHelper.createIterator(to));
int i = 0;
while (it.hasNext()) {
if (i == 0) {
assertEquals("james@localhost", it.next().trim());
} else {
assertEquals("bar@localhost", it.next().trim());
}
i++;
}
Enumeration<Header> iter = CastUtils.cast(inMessage.getAllHeaders());
while (iter.hasMoreElements()) {
Header header = iter.nextElement();
String[] value = message.getHeader(header.getName());
log.debug("Header: " + header.getName() + " has value: " + ObjectHelper.asString(value));
}
}
use of javax.mail.Header in project jodd by oblac.
the class ReceivedEmail method parseMessage.
/**
* Parse java <code>Message</code> and extracts all data for the received message.
*/
@SuppressWarnings("unchecked")
protected void parseMessage(Message msg) throws MessagingException, IOException {
// flags
setFlags(msg.getFlags());
// msg no
setMessageNumber(msg.getMessageNumber());
// single from
Address[] addresses = msg.getFrom();
if (addresses != null && addresses.length > 0) {
setFrom(new EmailAddress(addresses[0]));
}
// common field
setTo(EmailAddress.createFrom(msg.getRecipients(Message.RecipientType.TO)));
setCc(EmailAddress.createFrom(msg.getRecipients(Message.RecipientType.CC)));
setBcc(EmailAddress.createFrom(msg.getRecipients(Message.RecipientType.BCC)));
// reply to
setReplyTo(EmailAddress.createFrom(msg.getReplyTo()));
setSubject(msg.getSubject());
setReceiveDate(parseReceiveDate(msg));
setSentDate(parseSendDate(msg));
// copy headers
Enumeration<Header> headers = msg.getAllHeaders();
while (headers.hasMoreElements()) {
Header header = headers.nextElement();
setHeader(header.getName(), header.getValue());
}
// content
processPart(this, msg);
}
Aggregations