/** * Adds String content as either {@link EmailAttachment} or as {@link EmailMessage}. * * @param part {@link Part} * @param content Content as {@link String} * @throws MessagingException if there is a failure. * @throws UnsupportedEncodingException if the named charset is not supported. * @see #message(String, String, String) */ private void addStringContent(final Part part, final String content) throws MessagingException, UnsupportedEncodingException { final String contentType = part.getContentType(); final String encoding = EmailUtil.extractEncoding(contentType, StringPool.US_ASCII); final String disposition = part.getDisposition(); if (disposition != null && disposition.equalsIgnoreCase(Part.ATTACHMENT)) { addAttachment(part, content.getBytes(encoding)); } else { final String mimeType = EmailUtil.extractMimeType(contentType); message(content, mimeType, encoding); } }
private static String defaultFileName(final String contentType) { return NO_NAME + contentTypeForFileName(contentType); }
/** * {@inheritDoc} * * @return {@link ReceiveMailSession} * @see EmailUtil#createSession(String, Properties, Authenticator, File) */ @Override public ReceiveMailSession createSession() { return EmailUtil.createSession( PROTOCOL_POP3, createSessionProperties(), authenticator, attachmentStorage); }
/** * Correctly resolves file name from the message part. * Thanx to: Flavio Pompermaier * * @param part {@link Part} to decode file name from. * @return String containing file name. */ public static String resolveFileName(final Part part) throws MessagingException { if (!(part instanceof MimeBodyPart)) { return part.getFileName(); } final String contentType = part.getContentType(); String ret; try { ret = MimeUtility.decodeText(part.getFileName()); } catch (final Exception ex) { // String[] contentId = part.getHeader("Content-ID"); // if (contentId != null && contentId.length > 0) { final String contentId = ((MimeBodyPart) part).getContentID(); if (contentId != null) { ret = contentId + contentTypeForFileName(contentType); } else { ret = defaultFileName(contentType); } } return ret; }
/** * Extracts encoding from a given content type. * * @param contentType content type. * @param defaultEncoding Default encoding to be used if extract returns {@code null}. * If defaultEncoding is {@code null}, {@link JoddCore#encoding} will be used. * @return Encoding from the content type. * @see #extractEncoding(String) */ public static String extractEncoding(final String contentType, String defaultEncoding) { String encoding = extractEncoding(contentType); if (encoding == null) { if (defaultEncoding == null) { defaultEncoding = JoddCore.encoding; } encoding = defaultEncoding; } return encoding; }
/** * Creates {@link EmailAttachmentBuilder} from {@link Part} and sets Content ID, inline and name. * * @param part {@link Part}. * @return this * @see #attachment(EmailAttachment) */ private static EmailAttachmentBuilder addAttachmentInfo(final Part part) throws MessagingException { final String fileName = EmailUtil.resolveFileName(part); final String contentId = parseContentId(part); final boolean isInline = parseInline(part); return new EmailAttachmentBuilder() .name(fileName) .contentId(contentId) .inline(isInline); }
/** * Correctly resolves file name from the message part. * Thanx to: Flavio Pompermaier * * @param part {@link Part} to decode file name from. * @return String containing file name. */ public static String resolveFileName(final Part part) throws MessagingException { if (!(part instanceof MimeBodyPart)) { return part.getFileName(); } final String contentType = part.getContentType(); String ret; try { ret = MimeUtility.decodeText(part.getFileName()); } catch (final Exception ex) { // String[] contentId = part.getHeader("Content-ID"); // if (contentId != null && contentId.length > 0) { final String contentId = ((MimeBodyPart) part).getContentID(); if (contentId != null) { ret = contentId + contentTypeForFileName(contentType); } else { ret = defaultFileName(contentType); } } return ret; }
/** * Extracts encoding from a given content type. * * @param contentType content type. * @param defaultEncoding Default encoding to be used if extract returns {@code null}. * If defaultEncoding is {@code null}, {@link JoddCore#encoding} will be used. * @return Encoding from the content type. * @see #extractEncoding(String) */ public static String extractEncoding(final String contentType, String defaultEncoding) { String encoding = extractEncoding(contentType); if (encoding == null) { if (defaultEncoding == null) { defaultEncoding = JoddCore.encoding; } encoding = defaultEncoding; } return encoding; }
/** * Creates {@link EmailAttachmentBuilder} from {@link Part} and sets Content ID, inline and name. * * @param part {@link Part}. * @return this * @see #attachment(EmailAttachment) */ private static EmailAttachmentBuilder addAttachmentInfo(final Part part) throws MessagingException { final String fileName = EmailUtil.resolveFileName(part); final String contentId = parseContentId(part); final boolean isInline = parseInline(part); return new EmailAttachmentBuilder() .name(fileName) .contentId(contentId) .inline(isInline); }
@Test void testExtractContentType() { String contentType = "multipart/mixed;"; assertEquals("multipart/mixed", EmailUtil.extractMimeType(contentType)); assertNull(EmailUtil.extractEncoding(contentType)); contentType = "multipart/mixed; boundary=-----"; assertEquals("multipart/mixed", EmailUtil.extractMimeType(contentType)); assertNull(EmailUtil.extractEncoding(contentType)); contentType = "text/html;\n\tcharset=\"us-ascii\""; assertEquals(MimeTypes.MIME_TEXT_HTML, EmailUtil.extractMimeType(contentType)); assertEquals(StringPool.US_ASCII.toLowerCase(), EmailUtil.extractEncoding(contentType)); contentType = "TEXT/PLAIN; charset=US-ASCII; name=example.eml"; assertEquals(MimeTypes.MIME_TEXT_PLAIN.toUpperCase(), EmailUtil.extractMimeType(contentType)); assertEquals(StringPool.US_ASCII, EmailUtil.extractEncoding(contentType)); }
/** * {@inheritDoc} * * @return {@link ReceiveMailSession} */ @Override public ReceiveMailSession createSession() { return EmailUtil.createSession( PROTOCOL_IMAP, createSessionProperties(), authenticator, attachmentStorage); }
private static String defaultFileName(final String contentType) { return NO_NAME + contentTypeForFileName(contentType); }
/** * Adds String content as either {@link EmailAttachment} or as {@link EmailMessage}. * * @param part {@link Part} * @param content Content as {@link String} * @throws MessagingException if there is a failure. * @throws UnsupportedEncodingException if the named charset is not supported. * @see #message(String, String, String) */ private void addStringContent(final Part part, final String content) throws MessagingException, UnsupportedEncodingException { final String contentType = part.getContentType(); final String encoding = EmailUtil.extractEncoding(contentType, StringPool.US_ASCII); final String disposition = part.getDisposition(); if (disposition != null && disposition.equalsIgnoreCase(Part.ATTACHMENT)) { addAttachment(part, content.getBytes(encoding)); } else { final String mimeType = EmailUtil.extractMimeType(contentType); message(content, mimeType, encoding); } }
/** * {@inheritDoc} * * @return {@link ReceiveMailSession} */ @Override public ReceiveMailSession createSession() { return EmailUtil.createSession( PROTOCOL_IMAP, createSessionProperties(), authenticator, attachmentStorage); }
/** * {@inheritDoc} * * @return {@link ReceiveMailSession} * @see EmailUtil#createSession(String, Properties, Authenticator, File) */ @Override public ReceiveMailSession createSession() { return EmailUtil.createSession( PROTOCOL_POP3, createSessionProperties(), authenticator, attachmentStorage); }