diff --git a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java index 7d4dc57f10..fbe8a54bbe 100644 --- a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java +++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java @@ -1,8 +1,5 @@ package com.baeldung.mail.mailwithattachment; -import java.io.File; -import java.io.IOException; -import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; @@ -10,23 +7,23 @@ import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; -import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.Properties; public class MailWithAttachmentService { - private String username = ""; - private String password = ""; - private String host = ""; - private String port = ""; + private final String username; + private final String password; + private final String host; + private final int port; - MailWithAttachmentService() { - } - - MailWithAttachmentService(String username, String password, String host, String port) { + MailWithAttachmentService(String username, String password, String host, int port) { this.username = username; this.password = password; this.host = host; @@ -40,15 +37,14 @@ public class MailWithAttachmentService { props.put("mail.smtp.host", this.host); props.put("mail.smtp.port", this.port); - Session session = Session.getInstance(props, new javax.mail.Authenticator() { + return Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); - return session; } - public Message createMail(Session session) throws AddressException, MessagingException, IOException { + public void sendMail(Session session) throws MessagingException, IOException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("mail@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("mail@gmail.com")); @@ -61,23 +57,27 @@ public class MailWithAttachmentService { multipart.addBodyPart(messageBodyPart); MimeBodyPart attachmentPart = new MimeBodyPart(); - MimeBodyPart attachmentPart2 = new MimeBodyPart(); - - attachmentPart.attachFile(new File("C:\\Document1.txt")); - attachmentPart2.attachFile(new File("C:\\Document2.txt")); - + attachmentPart.attachFile(getFile("attachment.txt")); multipart.addBodyPart(attachmentPart); + + MimeBodyPart attachmentPart2 = new MimeBodyPart(); + attachmentPart2.attachFile(getFile("attachment2.txt")); multipart.addBodyPart(attachmentPart2); message.setContent(multipart); - - return message; - } - - public void sendMail(Session session) throws MessagingException, IOException { - - Message message = createMail(session); Transport.send(message); } -} \ No newline at end of file + private File getFile(String filename) { + try { + URI uri = this.getClass() + .getClassLoader() + .getResource(filename) + .toURI(); + return new File(uri); + } catch (Exception e) { + throw new IllegalArgumentException("Unable to find file from resources: " + filename); + } + } + +} diff --git a/core-java-modules/core-java-networking-2/src/main/resources/attachment2.txt b/core-java-modules/core-java-networking-2/src/main/resources/attachment2.txt new file mode 100644 index 0000000000..14c8ea9ff9 --- /dev/null +++ b/core-java-modules/core-java-networking-2/src/main/resources/attachment2.txt @@ -0,0 +1 @@ +sample attachment content 2 \ No newline at end of file diff --git a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java index ef82657ab5..04ad47875f 100644 --- a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java +++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java @@ -1,48 +1,77 @@ package com.baeldung.mail.mailwithattachment; -import static org.junit.Assert.*; -import javax.annotation.Resource; -import javax.mail.Session; - -import org.junit.After; +import com.icegreen.greenmail.configuration.GreenMailConfiguration; +import com.icegreen.greenmail.junit.GreenMailRule; +import com.icegreen.greenmail.util.GreenMailUtil; +import com.icegreen.greenmail.util.ServerSetupTest; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; -import com.baeldung.mail.mailwithattachment.MailWithAttachmentService; -import com.icegreen.greenmail.util.GreenMail; -import com.icegreen.greenmail.util.ServerSetupTest; +import javax.annotation.Resource; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; + +import static org.junit.Assert.assertEquals; public class MailWithAttachmentServiceLiveTest { + private static final String USERNAME = "testUser"; + private static final String PASSWORD = "password"; + private static final String HOSTNAME = "localhost"; + + @Rule + public final GreenMailRule greenMail = new GreenMailRule(ServerSetupTest.SMTP) + .withConfiguration( + GreenMailConfiguration.aConfig() + .withUser(USERNAME, PASSWORD) + ); + @Resource private MailWithAttachmentService emailService; - private GreenMail greenMail; @Before - public void startMailServer() { - emailService = new MailWithAttachmentService(); - greenMail = new GreenMail(ServerSetupTest.SMTP); - greenMail.start(); - } - - @After - public void stopMailServer() { - greenMail.stop(); - emailService = null; + public void setup() { + emailService = new MailWithAttachmentService( + USERNAME, PASSWORD, HOSTNAME, greenMail.getSmtp().getPort() + ); } @Test - public void canSendMail() { - try { - Session testSession = greenMail.getSmtp() - .createSession(); - emailService.sendMail(testSession); - assertEquals(1, greenMail.getReceivedMessages().length); - - } catch (Exception e) { - e.printStackTrace(); - } + public void givenEmailService_whenMessageSentWithAttachments_thenMessageIsReceived() throws Exception { + Session tlsSession = emailService.getSession(); + emailService.sendMail(tlsSession); + + MimeMessage[] receivedMessages = greenMail.getReceivedMessages(); + assertEquals(1, receivedMessages.length); + + MimeMessage receivedMessage = receivedMessages[0]; + assertEquals("Testing Subject", subjectFrom(receivedMessage)); + assertEquals("This is message body", emailTextFrom(receivedMessage)); + assertEquals("sample attachment content", attachment1ContentsFrom(receivedMessage)); + assertEquals("sample attachment content 2", attachment2ContentsFrom(receivedMessage)); + } + + private static String subjectFrom(MimeMessage receivedMessage) throws MessagingException { + return receivedMessage.getSubject(); + } + + private static String emailTextFrom(MimeMessage receivedMessage) throws Exception { + return GreenMailUtil.getBody(((MimeMultipart) receivedMessage.getContent()) + .getBodyPart(0)); + } + + private static String attachment1ContentsFrom(MimeMessage receivedMessage) throws Exception { + return GreenMailUtil.getBody(((MimeMultipart) receivedMessage.getContent()) + .getBodyPart(1)); + } + + private static String attachment2ContentsFrom(MimeMessage receivedMessage) throws Exception { + return GreenMailUtil.getBody(((MimeMultipart) receivedMessage.getContent()) + .getBodyPart(2)); } }