第一次使用java邮件。我正在遵循本教程,但我已经无法发送基本消息,并且收到一个非常奇怪的错误:
java.util.ServiceConfigurationError: javax.mail.Provider: Provider com.sun.mail.imap.IMAPProvider not a subtype
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我没有在代码中的任何地方使用 IMAP:
Properties mailProps = new Properties();
mailProps.put("mail.transport.protocol", "smtp");
mailProps.put("mail.host", "smtp.mydomain.com");
mailProps.put("mail.from", "me@mydomain.com");
mailProps.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(mailProps);
SMTPMessage m = new SMTPMessage(session);
MimeMultipart content = new MimeMultipart();
MimeBodyPart mainPart = new MimeBodyPart();
mainPart.setText("test");
content.addBodyPart(mainPart);
m.setContent(content);
m.setSubject("Demo message");
m.setRecipient(RecipientType.TO, new InternetAddress("john@example.com"));
Transport.send(m);
Run Code Online (Sandbox Code Playgroud)
错误发生在最后一行(发送)。我知道 smtp 服务器正确且正常工作。
有什么建议为什么会发生这种情况以及我该如何解决它吗?
编辑:显然,地址/主机在这里发生了变化,我使用的是在实际代码中工作的真实地址/主机。
事实证明我遇到了多个问题:
它使用com.sun.mail.smtp.SMTPMessage但在我的情况下不起作用,但使用javax.mail.internet.MimeMessage效果很好。
上面的代码在基于 Eclipse 的第三方应用程序中运行,它们似乎互相干扰。可以在这里找到解决方案:
Thread t = Thread.currentThread();
ClassLoader ccl = t.getContextClassLoader();
t.setContextClassLoader(session.getClass().getClassLoader());
try {
Transport.send(m);
} finally {
t.setContextClassLoader(ccl);
}
Run Code Online (Sandbox Code Playgroud)
相应地调整代码使其工作。
| 归档时间: |
|
| 查看次数: |
9703 次 |
| 最近记录: |