java – 在不安装SMTP服务器的情况下测试Greenmail
发布时间:2020-12-15 04:57:02 所属栏目:Java 来源:网络整理
导读:我正在尝试使用Greenmail来测试我的localhost上的电子邮件功能.问题是我没有安装SMTP服务器,并且认为安装一个SMTP服务器过度.我的期望是应该有一个免费的库,允许我保持我的发送邮件代码相同,但不是真正发送电子邮件到SMTP服务器,发送到我的本地机器,以便我可
我正在尝试使用Greenmail来测试我的localhost上的电子邮件功能.问题是我没有安装SMTP服务器,并且认为安装一个SMTP服务器过度.我的期望是应该有一个免费的库,允许我保持我的发送邮件代码相同,但不是真正发送电子邮件到SMTP服务器,发送到我的本地机器,以便我可以检索它们(为了单位)测试).
我曾经使用Grails开发时曾使用Greenmail,而且体验很棒.但我找不到类似于Spring Framework的东西.在Greenmail页面中,它说有一个与JBoss捆绑在一起的模拟SMTP服务器.但我不想运行JBoss,因为目前我的Web应用程序正在Tomcat上运行. Tomcat有没有类似的服务?或者有没有更好的方法将测试电子邮件发送到localhost,我可以在哪里检索发送的电子邮件? 更新: 我尝试使用Ralph的方法,但它仍然产生相同的异常: [SimpleAsyncTaskExecutor-1] 2012-03-13 10:19:39,475 - ERROR: com.test.my.service.emailing.impl.EmailServiceImpl - Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: localhost,port: 3025; nested exception is: java.net.ConnectException: Connection refused: connect. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: localhost,port: 3025; nested exception is: java.net.ConnectException: Connection refused: connect org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: localhost,port: 3025; nested exception is: java.net.ConnectException: Connection refused: connect; message exception details (1) are: Failed message 1: javax.mail.MessagingException: Could not connect to SMTP host: localhost,port: 3025; nested exception is: java.net.ConnectException: Connection refused: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) at javax.mail.Service.connect(Service.java:288) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:336) at com.test.my.service.emailing.impl.EmailServiceImpl.test(EmailServiceImpl.java:388) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:80) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359) ... 19 more 解决方法
您可以将
Greenmail与任何Java程序一起使用,无论它是否使用Spring.你不需要任何Spring特定的东西.
它运行某种进程邮件服务器. import com.icegreen.greenmail.util.GreenMail; import com.icegreen.greenmail.util.GreenMailUtil; import com.icegreen.greenmail.util.ServerSetupTest; ... @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("ApplicationContext-Greenmail.xml") public class EmailServiceIntegrationTest { /** Class under test */ @Resource private EmailService emailService; private GreenMail greenMail; @Before public void startMailServer() { greenMail = new GreenMail(ServerSetupTest.SMTP); greenMail.start(); } @After public void stopMailServer() { greenMail.stop(); } @Test public void testPledgeReminder() throws InterruptedException,MessagingException { String mailText = "Hallo World"; String mailSubject = "Hallo"; String mailTo = "test@excaple.com"; /** when: sending a mail */ emailService.send(mailSubject,mailTo,mailText); assertTrue(greenMail.waitForIncomingEmail(5000,1)); Message[] messages = greenMail.getReceivedMessages(); assertEquals(1,messages.length); assertEquals(mailText,messages[0].getSubject()); String body = GreenMailUtil.getBody(messages[0]).replaceAll("=r?n",""); assertEquals(mailText,body); } } 重要:使用端口3025 <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="javaMailProperties"> <util:properties> <prop key="mail.debug">false</prop> <prop key="mail.transport.protocol">smtp</prop> <prop key="mail.smtp.port">3025</prop> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.user">test@mail.extern</prop> <prop key="mail.smtp.host">localhost</prop> <prop key="mail.smtp.from">test@mail.extern</prop> </util:properties> </property> <property name="username" value="test"/> <property name="password" value="xxx"/> <property name="defaultEncoding" value="utf8" /> </bean> 然后,此配置将配置Spring JavaMailSender将其邮件发送到由测试代码启动和完成的GreenMail-Server. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |