Я хочу использовать Greenmail, чтобы имитировать сервер imaps. Я хочу использовать сервер для системных тестов, я хочу запустить сервер greenmail и доставить его по электронной почте, а затем получить эти электронные письма с заданий, выполняемых на моем сервере приложений. мой вопрос в чем разница между GreenMail.start и развертыванием GreenMail как webapp. делает GreenMail.start развертывание сервера, который слушает, и я могу отправить запрос imaps с разных компьютеров?имитировать imaps сервер - Greenmail
Причина, по которой я хочу использовать GreenMail.start и не развертывать GreenMail как webapp, заключается в том, что я должен создавать учетную запись электронной почты на сервере greenmail каждый раз, когда выполняется тестирование, потому что тесты будут выполняться на разных машинах в в то же время, поэтому я не хочу иметь ту же учетную запись для всех машин.
мой код:
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.security.Security;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.icegreen.greenmail.util.DummySSLSocketFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.icegreen.greenmail.user.GreenMailUser;
import com.icegreen.greenmail.user.UserException;
import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.ServerSetupTest;
import testIMAPS.MailSender;
public class GreenmailTest {
public static final String USER_PASSWORD = "abcdef123";
public static final String USER_NAME = "hascode";
public static final String EMAIL_USER_ADDRESS = "[email protected]";
public static final String EMAIL_TO = "[email protected]";
public static final String EMAIL_SUBJECT = "Test E-Mail";
public static final String EMAIL_TEXT = "This is a test e-mail.";
public static final String LOCALHOST = "127.0.0.1";
public static GreenMail mailServer;
@Before
public void setUp() {
if (mailServer == null){
Security.setProperty("ssl.SocketFactory.provider",
DummySSLSocketFactory.class.getName());
mailServer = new GreenMail(ServerSetupTest.IMAPS);
mailServer.start();
}
}
@After
public void tearDown() {
mailServer.stop();
}
@Test
public void getMails() throws IOException, MessagingException,
UserException, InterruptedException {
// create user on mail server
GreenMailUser user = mailServer.setUser(EMAIL_USER_ADDRESS, USER_NAME,
USER_PASSWORD);
// create an e-mail message using javax.mail ..
MimeMessage message = new MimeMessage((Session) null);
message.setFrom(new InternetAddress(EMAIL_TO));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
EMAIL_USER_ADDRESS));
message.setSubject(EMAIL_SUBJECT);
message.setText(EMAIL_TEXT);
// use greenmail to store the message
user.deliver(message);
// fetch the e-mail via imaps using javax.mail ..
/*i want this code to be run on different machines to this greenmail server */
Properties props = new Properties();
String imapsProtocol = "imaps";
props.setProperty("mail.store.protocol", imapsProtocol);
props.setProperty("mail.imaps.port", String.valueOf(ServerSetupTest.IMAPS.getPort()));
Session session = Session.getInstance(props);
Store store = session.getStore(imapsProtocol);
store.connect(LOCALHOST, USER_NAME, USER_PASSWORD);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
assertNotNull(messages);
assertThat(1, equalTo(messages.length));
assertEquals(EMAIL_SUBJECT, messages[0].getSubject());
assertTrue(String.valueOf(messages[0].getContent())
.contains(EMAIL_TEXT));
assertEquals(EMAIL_TO, messages[0].getFrom()[0].toString());
}
}
когда я развернуть шантаж веб-приложение на кот я вижу, как ожидается, порт я определен используются. но когда я использую mailServer.start(), я не вижу, что порт используется. Зачем?
спасибо :)