当前位置: 首页 > 知识库问答 >
问题:

使用JUnit嘲弄电子邮件服务器时遇到麻烦

微生德泽
2023-03-14

我试图模拟发送电子邮件(出于JUnit,V4.8.1,测试的目的),并决定使用Dumbster,我通过SO找到了它。我用的是1.6版。我在JUnit测试中有这个…

    SimpleSmtpServer server = SimpleSmtpServer.start();
    boolean ret = m_emailSvc.sendEmail("me@me.com", 
                                       "you@you.com", 
                                       "localhost", 
                                       "Test", 
                                       "Test Body");
    Assert.assertTrue(ret);
    server.stop();

我用这种方式发邮件…

public boolean sendEmail(final String toEmail,
                      final String fromEmail,
                      final String smtpHost,
                      final String subject,
                      final String body)
{

    boolean ret = true;
    // Get system properties
    Properties properties = System.getProperties();

    // Setup mail server
    properties.setProperty("mail.smtp.host", smtpHost);

    // Get the default Session object.
    Session session = Session.getDefaultInstance(properties);

    try{
       // Create a default MimeMessage object.
       MimeMessage message = new MimeMessage(session);

       // Set From: header field of the header.
       message.setFrom(new InternetAddress(fromEmail));

       // Set To: header field of the header.
       message.addRecipient(Message.RecipientType.TO,
                                new InternetAddress(toEmail));

       // Set Subject: header field
       message.setSubject(subject);

       // Now set the actual message
       message.setText(body);

       // Send message
       Transport.send(message);
    }catch (MessagingException mex) {
       ret = false;
       LOG.error(mex.getMessage(), mex);
    }   // try
    return ret;
}   // sendEmail

此操作失败,但以下情况例外。有没有人知道我做错了什么,或者有没有更简单的方法在JUnit测试中模拟发送电子邮件?

java.net.BindException: Permission denied
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.socketBind(PlainSocketImpl.java:521)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:414)
    at java.net.ServerSocket.bind(ServerSocket.java:326)
    at java.net.ServerSocket.<init>(ServerSocket.java:192)
    at java.net.ServerSocket.<init>(ServerSocket.java:104)
    at com.dumbster.smtp.SimpleSmtpServer.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:680)
[ERROR]: org.mainco.subco.email.service.EmailServiceImpl - Could not connect to SMTP host: localhost, port: 25
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;

共有1个答案

别永年
2023-03-14

我决定使用PowerMock(V.1.5.1)来模拟Transport类的静态调用。

@RunWith(PowerMockRunner.class)
public class EmailServiceTest
{

@Autowired
private EmailService m_emailSvc = new EmailServiceImpl();

@Test
@PrepareForTest( Transport.class )
public final void testSendEmail()
{
    suppress(methodsDeclaredIn(Transport.class));
    boolean ret = m_emailSvc.sendEmail("me@me.com",
                                       "you@you.com", 
                                       "localhost",
                                       "Test",
                                       "Test Body");
    Assert.assertTrue(ret);
}   // testSendEmail
 类似资料:
  • 然后我尝试通过以下操作来测试这一点: 有没有人知道这是怎么回事!任何提示都很感激!

  • 我一直试图通过spring boot发送电子邮件,我似乎不能成功。我已经使用javamail api很长时间了,但是我想把springboot和spring邮件一起使用。 这是我的邮件 我的pom文件中已经有sprint-boot-starter-mail,但我一直收到这个错误消息。我甚至看过youtube上关于如何做到这一点的教程视频,但它并不起作用。我使用的是spring工具套件版本:3.9.

  • 最近,我看到一篇博文说,“出于文档的目的,我们在服务层使用mocking(在使用spring rest doc的环境中)”,所以这篇博文使用了类似spring的@MockBean到服务层对象的注释。 但我认为,如果我模仿服务层- 所以我觉得这是不对的但是, 我想知道什么更好,或者如何将service object与spring rest文档一起使用 恳求回答

  • 问题内容: 我从服务器使用IMAP协议就像是接收电子邮件描述了这里。这工作得很好,我可以将电子邮件和附件存储在磁盘上。 问题: 当客户端尝试接收所有电子邮件时,是否可以从服务器删除文件,以使它们不再可用? 如果是这样,请告诉我如何。 问题答案: 您应该能够通过标准API来执行此操作。 首先,您需要获取Message要删除的(或消息)的引用-如果您成功阅读它们,那么您已经可以做到 这一点。现在,没有

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 我目前正在为某人做一个网站,我想在联系我们页面上添加一个表单,使用他们没有Php的网络托管服务器向他们的电子邮件地址发送消息。有人能帮我吗?我无法理解这个过程,以及如何使它安全并真正发挥作用。我必须在服务器上部署一些东西吗?或者我可以使用他们在那里的smpt服务器吗?如果是这样,我如何确保smtp服务器身份验证在客户端的devols上不可见。谢谢你!