Search in sources :

Example 1 with Header

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;
}
Also used : Header(javax.mail.Header) MessagingException(javax.mail.MessagingException)

Example 2 with Header

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);
                }
            }
        }
    }
}
Also used : Header(javax.mail.Header) MimeBodyPart(javax.mail.internet.MimeBodyPart) Part(javax.mail.Part) BodyPart(javax.mail.BodyPart) DefaultAttachment(org.apache.camel.impl.DefaultAttachment)

Example 3 with Header

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;
}
Also used : MimeBodyPart(javax.mail.internet.MimeBodyPart) BodyPart(javax.mail.BodyPart) Header(javax.mail.Header) MimeMultipart(javax.mail.internet.MimeMultipart) TreeMap(java.util.TreeMap)

Example 4 with Header

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));
    }
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) MockEndpoint(org.apache.camel.component.mock.MockEndpoint) MockEndpoint(org.apache.camel.component.mock.MockEndpoint) Exchange(org.apache.camel.Exchange) Header(javax.mail.Header) MimeMessage(javax.mail.internet.MimeMessage) Test(org.junit.Test)

Example 5 with Header

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);
}
Also used : Address(javax.mail.Address) Header(javax.mail.Header)

Aggregations

Header (javax.mail.Header)142 Account (com.zimbra.cs.account.Account)84 DeliveryContext (com.zimbra.cs.mailbox.DeliveryContext)83 Mailbox (com.zimbra.cs.mailbox.Mailbox)83 Message (com.zimbra.cs.mailbox.Message)83 OperationContext (com.zimbra.cs.mailbox.OperationContext)83 ParsedMessage (com.zimbra.cs.mime.ParsedMessage)83 Test (org.junit.Test)80 MimeMessage (javax.mail.internet.MimeMessage)49 SyntaxException (org.apache.jsieve.exception.SyntaxException)39 MessagingException (javax.mail.MessagingException)26 MimeBodyPart (javax.mail.internet.MimeBodyPart)21 HashMap (java.util.HashMap)17 BodyPart (javax.mail.BodyPart)17 Enumeration (java.util.Enumeration)15 ByteString (com.linkedin.data.ByteString)12 ArrayList (java.util.ArrayList)12 MimeMultipart (javax.mail.internet.MimeMultipart)11 IOException (java.io.IOException)10 Test (org.testng.annotations.Test)10