You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/12/16 19:36:15 UTC
(commons-email) 02/04: Add MimeMessageUtils.createMimeMessage(Session, Path, OpenOption...)
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 <ga...@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_from@apache.org");
email.setSubject("Test Subject");
email.addTo("test_to@apache.org");
@@ -184,11 +181,9 @@ public class MimeMessageParserTest {
final HtmlEmail email = new HtmlEmail();
email.setMailSession(session);
-
email.setFrom("test_from@apache.org");
email.setSubject("Test Subject");
email.addTo("test_to@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_from@apache.org");
email.setSubject("Test Subject");
email.addTo("test_to@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());