This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-email.git
commit 3d48391f2ea8cad0d899b3bc974ae3b2309f4ea0 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sat Dec 16 14:26:13 2023 -0500 Add MimeMessageUtils.createMimeMessage(Session, Path, OpenOption...) --- src/changes/changes.xml | 1 + .../apache/commons/mail/util/MimeMessageUtils.java | 67 ++++++++++++++-------- .../commons/mail/util/MimeMessageParserTest.java | 33 ++++------- 3 files changed, 55 insertions(+), 46 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index a469379..ca7515f 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -52,6 +52,7 @@ <action type="add" due-to="Gary Gregory" dev="ggregory">Add Email.setSocketTimeout(Duration) and deprecate setSocketTimeout(int).</action> <action type="add" due-to="Gary Gregory" dev="ggregory">Add PathDataSource.</action> <action type="add" due-to="Gary Gregory" dev="ggregory">Add DataSourcePathResolver.</action> + <action type="add" due-to="Gary Gregory" dev="ggregory">Add MimeMessageUtils.createMimeMessage(Session, Path, OpenOption...).</action> <!-- UPDATE --> <action type="update" due-to="Dependabot" dev="sebb">Bump org.slf4j:slf4j-jdk14 from 1.7.7 to 2.0.9 #165.</action> <action type="update" due-to="Dependabot" dev="sebb">Bump mockito-core from 4.11.0 to 5.8.0 #187.</action> diff --git a/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java b/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java index 12784ff..6a00ca2 100644 --- a/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java +++ b/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java @@ -22,12 +22,15 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import javax.mail.util.SharedByteArrayInputStream; import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.OpenOption; +import java.nio.file.Path; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.MimeMessage; +import javax.mail.util.SharedByteArrayInputStream; /** * Static helper methods. @@ -39,11 +42,11 @@ public final class MimeMessageUtils { /** * Creates a MimeMessage. * - * @param session the mail session - * @param source the input data - * @return the MimeMessage - * @throws MessagingException creating the MimeMessage failed - * @throws IOException creating the MimeMessage failed + * @param session the mail session. + * @param source the input data. + * @return the MimeMessage. + * @throws MessagingException creating the MimeMessage failed. + * @throws IOException creating the MimeMessage failed. */ public static MimeMessage createMimeMessage(final Session session, final byte[] source) throws MessagingException, IOException { try (ByteArrayInputStream inputStream = new ByteArrayInputStream(source)) { @@ -54,11 +57,11 @@ public final class MimeMessageUtils { /** * Creates a MimeMessage. * - * @param session the mail session - * @param source the input data - * @return the MimeMessage - * @throws MessagingException creating the MimeMessage failed - * @throws IOException creating the MimeMessage failed + * @param session the mail session. + * @param source the input data. + * @return the MimeMessage. + * @throws MessagingException creating the MimeMessage failed. + * @throws IOException creating the MimeMessage failed. */ public static MimeMessage createMimeMessage(final Session session, final File source) throws MessagingException, IOException { try (FileInputStream inputStream = new FileInputStream(source)) { @@ -69,23 +72,39 @@ public final class MimeMessageUtils { /** * Creates a MimeMessage. * - * @param session the mail session - * @param source the input data - * @return the MimeMessage - * @throws MessagingException creating the MimeMessage failed + * @param session the mail session. + * @param source the input data. + * @return the MimeMessage. + * @throws MessagingException creating the MimeMessage failed. */ public static MimeMessage createMimeMessage(final Session session, final InputStream source) throws MessagingException { return new MimeMessage(session, source); } + /** + * Creates a MimeMessage. + * + * @param session the mail session. + * @param source the input data. + * @param options options specifying how the file is opened. + * @return the MimeMessage. + * @throws MessagingException creating the MimeMessage failed. + * @throws IOException creating the MimeMessage failed. + */ + public static MimeMessage createMimeMessage(final Session session, final Path source, OpenOption... options) throws MessagingException, IOException { + try (InputStream inputStream = Files.newInputStream(source, options)) { + return createMimeMessage(session, inputStream); + } + } + /** * Creates a MimeMessage using the platform's default character encoding. * - * @param session the mail session - * @param source the input data - * @return the MimeMessage - * @throws MessagingException creating the MimeMessage failed - * @throws IOException creating the MimeMessage failed + * @param session the mail session. + * @param source the input data. + * @return the MimeMessage. + * @throws MessagingException creating the MimeMessage failed. + * @throws IOException creating the MimeMessage failed. */ public static MimeMessage createMimeMessage(final Session session, final String source) throws MessagingException, IOException { final byte[] byteSource = source.getBytes(Charset.defaultCharset()); @@ -97,10 +116,10 @@ public final class MimeMessageUtils { /** * Writes a MimeMessage into a file. * - * @param mimeMessage the MimeMessage to write - * @param resultFile the file containing the MimeMessage - * @throws MessagingException accessing MimeMessage failed - * @throws IOException writing the MimeMessage failed + * @param mimeMessage the MimeMessage to write. + * @param resultFile the file containing the MimeMessage. + * @throws MessagingException accessing MimeMessage failed. + * @throws IOException writing the MimeMessage failed. */ public static void writeMimeMessage(final MimeMessage mimeMessage, final File resultFile) throws MessagingException, IOException { if (!resultFile.getParentFile().exists() && !resultFile.getParentFile().mkdirs()) { diff --git a/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java b/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java index c21bbbd..a7c2d88 100644 --- a/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java +++ b/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java @@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; +import java.nio.file.Paths; import java.util.List; import java.util.Properties; @@ -34,9 +35,10 @@ import org.apache.commons.mail.HtmlEmail; import org.junit.jupiter.api.Test; /** - * Testing the MimeMessageParser. + * Tests {@link MimeMessageParser}. */ public class MimeMessageParserTest { + /** * This test parses a SAP generated email which only contains a PDF but no email text. * @@ -44,9 +46,8 @@ public class MimeMessageParserTest { */ @Test public void testAttachmentOnly() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); - final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/attachment-only.eml")); + final MimeMessage message = MimeMessageUtils.createMimeMessage(session, Paths.get("./src/test/resources/eml/attachment-only.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); mimeMessageParser.parse(); @@ -67,7 +68,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(1, attachmentList.size()); - dataSource = mimeMessageParser.findAttachmentByName("Kunde 100029 Auftrag 3600.pdf"); + DataSource dataSource = mimeMessageParser.findAttachmentByName("Kunde 100029 Auftrag 3600.pdf"); assertNotNull(dataSource); assertEquals("application/pdf", dataSource.getContentType()); } @@ -79,7 +80,6 @@ public class MimeMessageParserTest { */ @Test public void testMultipartTextAttachment() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-text-attachment.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); @@ -102,7 +102,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(1, attachmentList.size()); - dataSource = mimeMessageParser.findAttachmentByName("test.txt"); + DataSource dataSource = mimeMessageParser.findAttachmentByName("test.txt"); assertNotNull(dataSource); assertEquals("text/plain", dataSource.getContentType()); } @@ -114,7 +114,6 @@ public class MimeMessageParserTest { */ @Test public void testMultipartTextAttachmentOnly() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-text-attachment-only.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); @@ -137,7 +136,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(1, attachmentList.size()); - dataSource = mimeMessageParser.findAttachmentByName("test.txt"); + DataSource dataSource = mimeMessageParser.findAttachmentByName("test.txt"); assertNotNull(dataSource); assertEquals("text/plain", dataSource.getContentType()); } @@ -145,11 +144,9 @@ public class MimeMessageParserTest { @Test public void testParseCreatedHtmlEmailWithMixedContent() throws Exception { final Session session = Session.getDefaultInstance(new Properties()); - final HtmlEmail email = new HtmlEmail(); email.setMailSession(session); - email.setFrom("test_f...@apache.org"); email.setSubject("Test Subject"); email.addTo("test...@apache.org"); @@ -184,11 +181,9 @@ public class MimeMessageParserTest { final HtmlEmail email = new HtmlEmail(); email.setMailSession(session); - email.setFrom("test_f...@apache.org"); email.setSubject("Test Subject"); email.addTo("test...@apache.org"); - email.buildMimeMessage(); final MimeMessage msg = email.getMimeMessage(); @@ -215,9 +210,7 @@ public class MimeMessageParserTest { final Session session = Session.getDefaultInstance(new Properties()); final HtmlEmail email = new HtmlEmail(); - email.setMailSession(session); - email.setFrom("test_f...@apache.org"); email.setSubject("Test Subject"); email.addTo("test...@apache.org"); @@ -246,7 +239,6 @@ public class MimeMessageParserTest { @Test public void testParseHtmlEmailWithAttachmentAndEncodedFileName() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment-encoded-filename.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); @@ -269,7 +261,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(1, attachmentList.size()); - dataSource = mimeMessageParser.getAttachmentList().get(0); + DataSource dataSource = mimeMessageParser.getAttachmentList().get(0); assertNotNull(dataSource); assertEquals("text/plain", dataSource.getContentType()); assertEquals("Test Attachment - a>ä, o>ö, u>ü, au>äu", dataSource.getName()); @@ -277,7 +269,6 @@ public class MimeMessageParserTest { @Test public void testParseHtmlEmailWithAttachments() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); @@ -300,7 +291,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(2, attachmentList.size()); - dataSource = mimeMessageParser.findAttachmentByName("Wasserlilien.jpg"); + DataSource dataSource = mimeMessageParser.findAttachmentByName("Wasserlilien.jpg"); assertNotNull(dataSource); assertEquals("image/jpeg", dataSource.getContentType()); @@ -316,7 +307,6 @@ public class MimeMessageParserTest { */ @Test public void testParseHtmlEmailWithHtmlAttachment() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/html-attachment-content-disposition.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); @@ -339,7 +329,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(1, attachmentList.size()); - dataSource = mimeMessageParser.findAttachmentByName("test.html"); + DataSource dataSource = mimeMessageParser.findAttachmentByName("test.html"); assertNotNull(dataSource); assertEquals("text/html", dataSource.getContentType()); } @@ -380,7 +370,6 @@ public class MimeMessageParserTest { */ @Test public void testParseMultipartReport() throws Exception { - DataSource dataSource; final Session session = Session.getDefaultInstance(new Properties()); final MimeMessage message = MimeMessageUtils.createMimeMessage(session, new File("./src/test/resources/eml/multipart-report.eml")); final MimeMessageParser mimeMessageParser = new MimeMessageParser(message); @@ -403,7 +392,7 @@ public class MimeMessageParserTest { final List<?> attachmentList = mimeMessageParser.getAttachmentList(); assertEquals(1, attachmentList.size()); - dataSource = (DataSource) attachmentList.get(0); + DataSource dataSource = (DataSource) attachmentList.get(0); assertNotNull(dataSource); assertNull(dataSource.getName()); assertEquals("message/disposition-notification", dataSource.getContentType());