首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟imaps服务器- Greenmail

模拟imaps服务器- Greenmail
EN

Stack Overflow用户
提问于 2015-06-07 18:47:37
回答 1查看 737关注 0票数 1

我想使用绿邮来模拟imaps服务器。我想要使用服务器进行系统测试,我想运行绿色邮件服务器并发送电子邮件,然后从运行在我的应用服务器上的作业中获取这些电子邮件。我的问题是,GreenMail.start与将GreenMail部署为webapp有什么区别。GreenMail.start是否部署了一个监听服务器,我可以从不同的机器发送imaps请求?

我想使用GreenMail.start而不是将GreenMail部署为webapp的原因是,每次测试运行时,我都必须在greenmail服务器上创建一个电子邮件帐户,这是因为测试将在同一时间在不同的机器上运行,所以我不想对所有机器都使用相同的帐户。

我的代码:

代码语言:javascript
复制
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 = "hascode@localhost";
public static final String EMAIL_TO = "someone@localhost.com";
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());
}
}

当我在tomcat上部署绿色邮件应用程序时,我看到了我定义的端口被使用了。但是当我使用mailServer.start()时,我看不到端口被使用了。为什么?

谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-21 20:03:56

是的,GreenMail.start使用提供的ServerSetup配置启动服务器。根据主机设置(localhost与例如0.0.0.0),可以从其他主机访问GreenMail。无论使用GreenMail.start还是部署GreenMail webapp,您都可以这样做(它只是一个包装器,可以将它扔到应用服务器中)。

您可以使用所需的用户预先配置GreenMail Webapp应用程序。有关如何通过打包的配置GreenMail webapp应用程序添加用户或配置IMAPS端口,请参见web.xml。

关于“查看使用的端口”:对于mailServer.start(),您可以通过

代码语言:javascript
复制
greenMail.getImaps().getPort()

当将GreenMail作为webapp运行/部署时,您可以预先配置web.xml内部的端口。当GreenMail Webapp部署时,它会记录端口。我猜这就是你所说的“看到使用的港口”?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30697217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档