问题标签 [greenmail]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4719 浏览

java - 用于发送电子邮件的 Java 框架

你知道 Java 中有什么框架可以可靠地发送大量电子邮件,并具有以下功能:

  • 发送和接收电子邮件
  • 同时处理来自队列的电子邮件以最大化吞吐量
  • 跟踪无法发送的电子邮件

我知道自己编写并不难,但我想知道是否已经有一些复杂的东西可以重用。

更新:我的问题的用例不是发送时事通讯或垃圾邮件。它是紧急群发通知,例如在 5 分钟内发送 50,000 封电子邮件。我也不想实现自己的邮件服务器,我想将现有的邮件服务器与 JavaMail API 一起使用。但是 JavaMail API 不提供任何工具来排队和并发发送电子邮件以及跟踪无法发送的电子邮件。

0 投票
2 回答
6824 浏览

java - 将 Javamail 和 Greenmail 用于 SMTPS/SSL

我正在尝试编写一个测试,该测试将使用 JavaMail SMTP 或 SMTPS 通过 SSL 和身份验证向我正在运行的Greenmail服务器发送消息。

我写了一个快速的小子,它应该完全符合我的要求:

我的问题是我有几个例外:

我试过在这里查看其他一些答案,但我一定遗漏了一些东西:

很抱歉发了这么长的帖子,并提前感谢您的任何建议。

0 投票
5 回答
20104 浏览

java - 在不安装 SMTP 服务器的情况下测试 Greenmail

我正在尝试使用 Greenmail 在我的本地主机上对电子邮件功能进行单元测试。问题是我还没有安装 SMTP 服务器,并且觉得安装一个过于杀戮。我的期望是应该有一个免费库允许我保持发送邮件代码相同,但不是真正将电子邮件发送到 SMTP 服务器,而是将其发送到我的本地计算机以便我可以检索它们(为了单位测试)。

我曾经在用Grails开发的时候用过Greenmail,体验很棒。但是我找不到 Spring Framework 类似的东西。在Greenmail页面中,它说有一个与 JBoss 捆绑在一起的模拟 SMTP 服务器。但我不想运行 JBoss,因为目前我的 Web 应用程序正在 Tomcat 上运行。

Tomcat 已经有类似的服务了吗?或者有没有更好的方法将测试电子邮件发送到本地主机,在那里我可以检索发送的电子邮件?

更新

我尝试使用 Ralph 的方法,但它仍然产生相同的异常:

0 投票
0 回答
440 浏览

java - Greenmail 不会在 Junit 测试失败时关闭

我们一直在试图弄清楚如何停止 Greenmail,以便在 Junit 测试用例失败时它不会占用 3025 端口。

当单元测试失败时,Junit 似乎绕过了 @After 注释(如果我错了,请纠正),并继续进行以下测试。不幸的是,其他测试运行@Before,它启动了一个新的greenmail服务器,试图挂接到端口3025,从而导致另一个测试出现错误。

理想情况下,我们希望仅在实际失败的那些上显示失败,并且没有 1 或 2 个测试用例由于 Greenmail 问题而使测试套件的其余部分失败。

有什么帮助吗?

示例代码


0 投票
2 回答
5750 浏览

java - 测试已发送电子邮件 - Dumbster 和 greenmail 未捕获已发送的 JavaMail

我正在尝试集成Dumbster来测试我们基于 JavaMail 的外发电子邮件通知程序。电子邮件已发送,但在我的测试中 Dumbster 没有收到它们。我不确定我是否需要额外的配置来完成这项工作,但是在它所说的愚蠢主页上,它会自动侦听通过端口 25 上的 smtp 发送的邮件。

这是我们的 java 邮件设置:

我们的 Mailer 类只是注入了 JavaMailer:

正如他们在页面上展示的那样,测试非常简单:

正如我所说,邮件已发送,但断言失败。

有任何想法吗?

顺便说一句:我也尝试了 Greenmail,但结果相同:

maven略有不同:

考试

0 投票
1 回答
1567 浏览

java - 无法访问 GreenMail 收到的电子邮件的属性

我正在尝试使用 GreenMail 作为样机邮件服务器进行单元测试。它的工作是等待 IMAP/POP3 请求并发送虚拟邮件,但我无法让它工作。

这里没问题,到目前为止的输出是这样的:

** 类:类 javax.mail.internet.MimeMessage **

来自:某人@localhost.com

收件人:jdtest@localhost

主题:测试电子邮件

内容:这是一封测试邮件。

之后,我尝试从 GreenMail IMAP 服务器获取邮件:

我的奖励是

消息大小:1

** 类:类 com.sun.mail.imap.IMAPMessage **

和一个 FolderClosedException:

javax.mail.FolderClosedException:* BYE JavaMail 异常:com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1217) 处 com.sun.mail.imap.IMAPMessage.getFrom(IMAPMessage. java:252) 在 jd.controlling.EMailMonitoringTest.test(EMailMonitoringTest.java:85) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org .junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod。在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 调用Explosively(FrameworkMethod.java:41)在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 在 org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner .java:71) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 在 org.junit.runners.ParentRunner$1。在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:236) 在 org.eclipse.jdt.internal.junit4。 runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner。 runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)java:236) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse .jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)java:236) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse .jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

尝试访问 folder.getMessage(0) 只会导致 IndexOutOfBoundsException,但在数组中存储了一个 IMAPMessage 类的消息。有人知道这件事吗?

啊,是的,我尝试了hashCode上的示例,但它们也因同样的原因而失败......访问接收到的 IMAP 消息的属性时出现 FolderClosedException......

感激地接受任何提示。

0 投票
0 回答
733 浏览

email - Squirrelmail 与 Greenmail 错误“错误或格式错误的请求”

Greenmail是一种 SMTP、POP3、IMAP 邮件模拟服务,非常适合邮件测试,而不是真正的邮件服务器,您有一个存根来保存邮件以供以后确认。

Squirrelmail是一个基于 php 的 webmail 界面,我打算用它来访问 greenmail 但是...

当我尝试从 squirrelmail 打开一封电子邮件时,我得到:

错误:错误或格式错误的请求。

查询:FETCH 1 BODY[HEADER]

服务器响应:预期:'(' 发现:'B' 命令应该是 'UID |||'

那是 squirrel 1.4.22,今天我什至尝试安装 svn trunksquirrelmail-20140131_0200-SVN.devel.tar.gz并得到完全相同的错误。

尝试了 squirrel 的其他 webmail 替代方案,但也出现了类似的错误,除了atmail trial,它是唯一能够打开 greenmail 邮件的 webmail 客户端。Telnet 运行良好,但这对于我在这里尝试做的事情来说太差了。

因此,如果 atmail 可以做到这一点,那么在 squirrelmail 方面必须有一些事情要做,或者我在这里缺少一些与 imap 相关的配置?

注意 atmail 使用与 squirrelmail 相同的 php 5.3.10、apache2、ubuntu 精确 64 堆栈进行了测试。

为了重现错误,我在这里设置了一个开源 Vagrant VM

更新 1

我正在使用带有一些方便更新的yawebmail Web 客户端,以使电子邮件端到端测试留在浏览器中。Yawebmail 没有格式错误的请求问题。

更新 2

好消息!Greenmail 已移至 github,这个问题现在是官方 repo 中的一个问题

0 投票
1 回答
1380 浏览

java - greenmail 服务器没有收到邮件

  • 我通过 Greenmail 进行电子邮件类的单元测试

    公共类 GreenMailTest {

    /li>
  • 我使用此代码在 junit 上测试电子邮件服务器。

  • 但是服务器没有返回任何消息

  • 我做错了什么。

  • 我更改代码请检查它

0 投票
1 回答
109 浏览

java - Junit mokito util.properties 在 moking 后显示 null

  • 我用greenmail和JUNIT和mokito写了一封电子邮件测试,但是

  • 当我使用
    when(emailproperties.getUsername()).thenReturn("abc@gmail.com");

  • 显示空

  • 这是我的代码

公共类 EmailServiceImplTest {

  • 当我调试它时显示 null 我在做什么错
0 投票
1 回答
674 浏览

email - 模拟 imaps 服务器 - Greenmail

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

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

我的代码:

当我在 tomcat 上部署 greenmail webapp 时,我看到如预期的那样使用了我定义的端口。但是当我使用 mailServer.start() 时,我看不到端口已被使用。为什么?

谢谢 :)