Search in sources :

Example 1 with MimeBodyPart

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

Example 2 with MimeBodyPart

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 +++");
}
Also used : MimeBodyPart(javax.mail.internet.MimeBodyPart) BodyPart(javax.mail.BodyPart) Attachment(org.apache.camel.Attachment) DefaultAttachment(org.apache.camel.impl.DefaultAttachment) MimeBodyPart(javax.mail.internet.MimeBodyPart) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 3 with MimeBodyPart

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

Example 4 with MimeBodyPart

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);
        }
    }
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) Address(javax.mail.Address) InternetAddress(javax.mail.internet.InternetAddress) MimeMessage(javax.mail.internet.MimeMessage) MimeMultipart(javax.mail.internet.MimeMultipart) MimeBodyPart(javax.mail.internet.MimeBodyPart) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date) AddressException(javax.mail.internet.AddressException) MessagingException(javax.mail.MessagingException) SendFailedException(javax.mail.SendFailedException)

Example 5 with MimeBodyPart

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;
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) SendFailedException(javax.mail.SendFailedException) Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) Properties(java.util.Properties) Date(java.util.Date) SendFailedException(javax.mail.SendFailedException) UID(java.rmi.server.UID) StringTokenizer(java.util.StringTokenizer) MimeMessage(javax.mail.internet.MimeMessage) MimeMultipart(javax.mail.internet.MimeMultipart) MimeBodyPart(javax.mail.internet.MimeBodyPart) Session(javax.mail.Session)

Aggregations

MimeBodyPart (javax.mail.internet.MimeBodyPart)172 MimeMultipart (javax.mail.internet.MimeMultipart)111 MimeMessage (javax.mail.internet.MimeMessage)65 MessagingException (javax.mail.MessagingException)64 IOException (java.io.IOException)49 DataHandler (javax.activation.DataHandler)39 ByteString (com.linkedin.data.ByteString)38 ByteArrayOutputStream (java.io.ByteArrayOutputStream)37 BodyPart (javax.mail.BodyPart)35 InternetAddress (javax.mail.internet.InternetAddress)31 ZMimeBodyPart (com.zimbra.common.zmime.ZMimeBodyPart)30 Test (org.testng.annotations.Test)28 ZMimeMultipart (com.zimbra.common.zmime.ZMimeMultipart)23 Multipart (javax.mail.Multipart)20 InputStream (java.io.InputStream)18 ArrayList (java.util.ArrayList)17 HashMap (java.util.HashMap)16 Session (javax.mail.Session)16 Date (java.util.Date)15 Properties (java.util.Properties)15