@Override public ReceivedEmail clone() { return create() //original message .originalMessage(originalMessage()) // flags .flags(flags()) // message number and id .messageNumber(messageNumber()) .messageId(messageId()) // from / reply-to .from(from()) .replyTo(replyTo()) // recipients .to(to()) .cc(cc()) // subject .subject(subject(), subjectEncoding()) // dates .receivedDate(receivedDate()) .sentDate(sentDate()) // headers - includes priority .headers(headers()) // content / attachments .message(messages()) .storeAttachments(attachments()) .attachedMessages(attachedMessages()); }
/** * Process part of the received message. All parts are simply added to the {@link ReceivedEmail}, * i.e. hierarchy is not saved. * * @param part {@link Part} of received message * @throws IOException if there is an error with the content. * @throws MessagingException if there is an error. */ protected void processPart(final Part part) throws MessagingException, IOException { final Object content = part.getContent(); if (content instanceof String) { addStringContent(part, (String) content); } else if (content instanceof Multipart) { processMultipart((Multipart) content); } else if (content instanceof InputStream) { addAttachment(part, (InputStream) content, attachmentStorage); } else if (content instanceof MimeMessage) { final MimeMessage mimeMessage = (MimeMessage) content; attachedMessage(new ReceivedEmail(mimeMessage, false, attachmentStorage)); } else { addAttachment(part, part.getInputStream(), attachmentStorage); } }
/** * Adds received attachment. * * @param part {@link Part}. * @param content Content as {@link InputStream}. * @return this * @see #attachment(EmailAttachment) */ private ReceivedEmail addAttachment(final Part part, final InputStream content, final File attachmentStorage) throws MessagingException, IOException { final EmailAttachmentBuilder builder = addAttachmentInfo(part); builder.content(content, part.getContentType()); if (attachmentStorage != null) { String name = messageId + "-" + (this.attachments().size() + 1); return storeAttachment(builder.buildFileDataSource(name, attachmentStorage)); } return storeAttachment(builder.buildByteArrayDataSource()); }
flags(msg.getFlags()); messageNumber(msg.getMessageNumber()); messageId(((MimeMessage) msg).getMessageID()); from(addresses[0]); replyTo(msg.getReplyTo()); to(msg.getRecipients(Message.RecipientType.TO)); cc(msg.getRecipients(Message.RecipientType.CC)); subject(msg.getSubject()); receivedDate(msg.getReceivedDate()); sentDate(msg.getSentDate()); headers(msg.getAllHeaders()); processPart(msg);
assertEquals("Example <from@example.com>", email.from().toString()); assertEquals("to@example.com", email.to()[0].toString()); assertEquals("test!", email.subject()); assertEquals(Date.from(instant), email.sentDate()); Map<String, String> headers = email.headers(); assertEquals("1.0", headers.get("MIME-Version")); List<EmailMessage> messages = email.messages(); assertEquals(2, messages.size()); List<EmailAttachment<? extends DataSource>> attachments = email.attachments(); assertNotNull(attachments); assertTrue(attachments.isEmpty()); List<ReceivedEmail> attachedMessages = email.attachedMessages(); assertNotNull(attachedMessages); assertEquals(1, attachedMessages.size()); assertEquals("Example <from@example.com>", email.from().toString()); assertEquals("to@example.com", email.to()[0].toString()); assertEquals("test", email.subject()); headers = email.headers(); assertEquals("1.0", headers.get("MIME-Version")); messages = email.messages(); assertEquals(2, messages.size());
@Test void testSimpleNullEML() throws FileNotFoundException, MessagingException { final File emlFile = new File(testDataRoot, "simple-null.eml"); final ReceivedEmail email = EMLParser.create().parse(emlFile); assertNull(email.from()); assertEquals("recipient@emailhost.com", email.to()[0].toString()); assertEquals("Email subject", email.subject()); final List<EmailMessage> messages = email.messages(); assertEquals(1, messages.size()); assertEquals(MimeTypes.MIME_TEXT_HTML, messages.get(0).getMimeType()); assertEquals("<p><strong>Project Name: Some Project and the body continues...</p>", messages.get(0).getContent().trim()); final List<EmailAttachment<? extends DataSource>> attachments = email.attachments(); assertEquals(2, attachments.size()); EmailAttachment att = attachments.get(0); assertEquals("no-name.pdf", att.getName()); att = attachments.get(1); assertEquals("no-name.excel", att.getName()); } }
emails[i] = new ReceivedEmail(msg, envelope, attachmentStorage); emails[i].flags(flagsToSet); msg.setFlags(flagsToSet, true); emails[i].flags().remove(flagsToUnset); msg.setFlags(flagsToUnset, false); if (flagsToSet == null && !emails[i].isSeen()) { msg.setFlag(Flags.Flag.SEEN, false);
assertTrue(receivedEmail.attachedMessages().isEmpty()); receivedEmails2 = session.receive().filter(EmailFilter.filter().messageId(receivedEmails[0].messageId())).get();
List<EmailAttachment<?>> attachmentList = receivedEmail.attachments(); assertEquals(1, attachmentList.size()); EmailAttachment att = attachmentList.get(0); List<EmailAttachment<?>> attachmentList = receivedEmail.attachments(); assertEquals(1, attachmentList.size()); EmailAttachment att = attachmentList.get(0);
/** * Static constructor for fluent interface. * * @return new {@link ReceivedEmail}. */ public static ReceivedEmail create() { return new ReceivedEmail(); }
flags(msg.getFlags()); messageNumber(msg.getMessageNumber()); messageId(((MimeMessage) msg).getMessageID()); from(addresses[0]); replyTo(msg.getReplyTo()); to(msg.getRecipients(Message.RecipientType.TO)); cc(msg.getRecipients(Message.RecipientType.CC)); subject(msg.getSubject()); receivedDate(msg.getReceivedDate()); sentDate(msg.getSentDate()); headers(msg.getAllHeaders()); processPart(msg);
@Test void testParseEMLCyrilic() throws FileNotFoundException, MessagingException { final File emlFile = new File(testDataRoot, "cyrilic.eml"); final ReceivedEmail email = EMLParser.create().parse(emlFile); assertEquals("Tijana <tijan@gmail.com>", email.from().toString()); assertEquals("testapp1@esolut.ions", email.to()[0].toString()); assertEquals("testtest", email.subject()); final List<EmailMessage> messages = email.messages(); assertEquals(2, messages.size()); assertEquals(MimeTypes.MIME_TEXT_PLAIN, messages.get(0).getMimeType()); assertEquals("", messages.get(0).getContent().trim()); assertEquals(MimeTypes.MIME_TEXT_HTML, messages.get(1).getMimeType()); assertEquals("<div dir=\"ltr\"><br></div>", messages.get(1).getContent().trim()); final List<EmailAttachment<? extends DataSource>> attachments = email.attachments(); assertEquals(1, attachments.size()); final EmailAttachment att = attachments.get(0); assertEquals("Copy of РЕКРЕАТИВНА ЕСТЕТСКА ГИМНАСТИКА-флајер - 4.docx", att.getName()); }
/** * Adds received attachment. * * @param part {@link Part}. * @param content Content as {@link InputStream}. * @return this * @see #attachment(EmailAttachment) */ private ReceivedEmail addAttachment(final Part part, final InputStream content, final File attachmentStorage) throws MessagingException, IOException { final EmailAttachmentBuilder builder = addAttachmentInfo(part); builder.content(content, part.getContentType()); if (attachmentStorage != null) { String name = messageId + "-" + (this.attachments().size() + 1); return storeAttachment(builder.buildFileDataSource(name, attachmentStorage)); } return storeAttachment(builder.buildByteArrayDataSource()); }
emails[i] = new ReceivedEmail(msg, envelope, attachmentStorage); emails[i].flags(flagsToSet); msg.setFlags(flagsToSet, true); emails[i].flags().remove(flagsToUnset); msg.setFlags(flagsToUnset, false); if (flagsToSet == null && !emails[i].isSeen()) { msg.setFlag(Flags.Flag.SEEN, false);
checkTo(receivedEmail); checkAttachments(sentEmail.attachments(), receivedEmail.attachments());
/** * Parses the EML content. If {@link Session} is not created, default one will be used. * * @param emlContentInputStream {@link InputStream} containing the EML content. * @return {@link ReceivedEmail}. * @throws MessagingException if {@link MimeMessage} cannot be created. */ protected ReceivedEmail parse(final InputStream emlContentInputStream) throws MessagingException { if (getSession() == null) { createSession(getProperties()); } try { final MimeMessage message = new MimeMessage(getSession(), emlContentInputStream); return new ReceivedEmail(message, false, null); } finally { StreamUtil.close(emlContentInputStream); } } }
@Override public ReceivedEmail clone() { return create() //original message .originalMessage(originalMessage()) // flags .flags(flags()) // message number and id .messageNumber(messageNumber()) .messageId(messageId()) // from / reply-to .from(from()) .replyTo(replyTo()) // recipients .to(to()) .cc(cc()) // subject .subject(subject(), subjectEncoding()) // dates .receivedDate(receivedDate()) .sentDate(sentDate()) // headers - includes priority .headers(headers()) // content / attachments .message(messages()) .storeAttachments(attachments()) .attachedMessages(attachedMessages()); }
@Test void testSimpleEML() throws FileNotFoundException, MessagingException { final File emlFile = new File(testDataRoot, "simple.eml"); final ReceivedEmail email = EMLParser.create().parse(emlFile); assertEquals("sender@emailhost.com", email.from().toString()); assertEquals("recipient@emailhost.com", email.to()[0].toString()); assertEquals("Email subject", email.subject()); final List<EmailMessage> messages = email.messages(); assertEquals(1, messages.size()); assertEquals(MimeTypes.MIME_TEXT_HTML, messages.get(0).getMimeType()); assertEquals("<p><strong>Project Name: Some Project and the body continues...</p>", messages.get(0).getContent().trim()); final List<EmailAttachment<? extends DataSource>> attachments = email.attachments(); assertEquals(2, attachments.size()); EmailAttachment att = attachments.get(0); assertEquals("AM22831 Cover Sheet.pdf", att.getName()); att = attachments.get(1); assertEquals("AM22831 Manufacturing Status.xls", att.getName()); }
/** * Process part of the received message. All parts are simply added to the {@link ReceivedEmail}, * i.e. hierarchy is not saved. * * @param part {@link Part} of received message * @throws IOException if there is an error with the content. * @throws MessagingException if there is an error. */ protected void processPart(final Part part) throws MessagingException, IOException { final Object content = part.getContent(); if (content instanceof String) { addStringContent(part, (String) content); } else if (content instanceof Multipart) { processMultipart((Multipart) content); } else if (content instanceof InputStream) { addAttachment(part, (InputStream) content, attachmentStorage); } else if (content instanceof MimeMessage) { final MimeMessage mimeMessage = (MimeMessage) content; attachedMessage(new ReceivedEmail(mimeMessage, false, attachmentStorage)); } else { addAttachment(part, part.getInputStream(), attachmentStorage); } }
/** * Static constructor for fluent interface. * * @return new {@link ReceivedEmail}. */ public static ReceivedEmail create() { return new ReceivedEmail(); }