java – 在不安装SMTP服务器的情况下测试Greenmail
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在不安装SMTP服务器的情况下测试Greenmail,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5956字,纯文字阅读大概需要9分钟。
内容图文
我正在尝试使用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. Failed messages: 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.
内容总结
以上是互联网集市为您收集整理的java – 在不安装SMTP服务器的情况下测试Greenmail全部内容,希望文章能够帮你解决java – 在不安装SMTP服务器的情况下测试Greenmail所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。