[JAVA-8592] Fix email service live test

This commit is contained in:
Haroon Khan 2021-11-20 22:30:23 +00:00
parent 13348bab48
commit 388d2124d8
3 changed files with 87 additions and 57 deletions

View File

@ -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);
}
}
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);
}
}
}

View File

@ -0,0 +1 @@
sample attachment content 2

View File

@ -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));
}
}