2015-06-07 2 views
1

Я хочу использовать 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(), я не вижу, что порт используется. Зачем?

спасибо :)

ответ

0

Да, GreenMail.start запускает сервер, используя прилагаемую конфигурацию ServerSetup. GreenMail доступен с других хостов в зависимости от настроек хоста (localhost против, например, 0.0.0.0). Вы можете сделать это независимо от использования GreenMail.start или при развертывании GreenMail webapp (это просто оболочка, чтобы бросить его на сервер приложений).

Вы можете предварительно сконфигурировать GreenMail Webapp с нужными пользователями. См. configuring GreenMail webapp о том, как добавить пользователей или настроить порт IMAPS через упакованный web.xml.

Что касается «видеть порт, используемый»: Для mailServer.start(), вы можете получить доступ к порту IMAPS через

greenMail.getImaps().getPort()

При запуске/развертывании шантаже, как веб-приложение, вы предварительно настроить порт внутри web.xml. Когда GreenMail Webapp развертывается, он регистрирует порты. Я предполагаю, что это то, что вы имеете в виду, «видя порт используемый»?

 Смежные вопросы

  • Нет связанных вопросов^_^