java - 当Powermock注释生效时,电子邮件发送失败并出现异常

标签 java email smtp easymock powermock

有一个有趣的案例,也许我应该像报告错误一样报告它:

当我尝试在没有注释的情况下发送时,它就像一个魅力,当

我添加了这些行:

@RunWith(PowerMockRunner.class)
@PrepareForTest()

(有这方面的经验吗?有谁知道吗?) 即使 (PrepareForTest()) 内容为空,电子邮件发送也会失败:

javax.mail.MessagingException: Could not connect to SMTP host: 192.168.51.1, port: 465;
  nested exception is:
    java.io.IOException: Can't create MailSSLSocketFactory
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2055)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
    at javax.mail.Service.connect(Service.java:364)
    at javax.mail.Service.connect(Service.java:245)
    at javax.mail.Service.connect(Service.java:194)
    at reignsoft.email.EmailSender.sendMail(EmailSender.java:110)
    at reignsoft.email.EmailSender.sendMail(EmailSender.java:59)
    at reignsoft.email.EmailSenderTest.testSendMail(EmailSenderTest.java:225)
    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.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:310)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:101)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
    at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at 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)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: Can't create MailSSLSocketFactory
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:333)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:236)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2019)
    ... 36 more
Caused by: java.security.NoSuchAlgorithmException: class configured for SSLContext: sun.security.ssl.SSLContextImpl$TLS10Context not a SSLContext
    at sun.security.jca.GetInstance.checkSuperClass(Unknown Source)
    at sun.security.jca.GetInstance.getInstance(Unknown Source)
    at sun.security.jca.GetInstance.getInstance(Unknown Source)
    at javax.net.ssl.SSLContext.getInstance(Unknown Source)
    at com.sun.mail.util.MailSSLSocketFactory.<init>(MailSSLSocketFactory.java:112)
    at com.sun.mail.util.MailSSLSocketFactory.<init>(MailSSLSocketFactory.java:94)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:326)
    ... 38 more

最佳答案

这是一个已知问题。

PowerMock类加载器尝试加载这些安全类,而不是默认的类加载器。所以解决方案是@PowerMockIgnore()这些类,这样java类加载器就会完成这项工作。

基于此线程: https://groups.google.com/forum/#!topic/powermock/v4nreP2AnOQ

关于java - 当Powermock注释生效时,电子邮件发送失败并出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940036/

相关文章:

java - 验证不同的验证组 JSF 2.0

来自 Sharepoint 的 HTML 电子邮件看起来与网站上的不同

email - 使用 piwik 跟踪电子邮件通讯

email - 使用 codeigniter 框架的 gmail smtp 在我的主机中不工作

c# - SMTP 服务器需要安全连接或客户端未通过身份验证

python - 如何在 python 中使用 cron 和 smtp 安排在特定时间发送电子邮件?

java - 从网络服务返回图像

java - Spring 启动 : Cors policy missing 'access-control-allow-origin'

php - 在电子邮件消息 php 中输出 <hr>

java - 如何在客户端使用 GWT 将文本写入文件?