当前位置: 首页 > 知识库问答 >
问题:

Java Mail:发送电子邮件时出现异常

扶文光
2023-03-14

第一次使用java邮件。我正在遵循本教程,但我已经无法发送基本消息,并且我收到了一个非常奇怪的错误:

java.util.ServiceConfigurationError: javax.mail.Provider: Provider com.sun.mail.imap.IMAPProvider not a subtype

奇怪的是,我的代码中没有使用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);

错误发生在最后一行(发送)。我知道smtp服务器正常工作。

有什么建议吗?为什么会发生这种情况?我该如何解决?

编辑:显然,地址/主机在这里发生了更改,我使用的是在实际代码中工作的真实地址/主机。

共有3个答案

朱季
2023-03-14

我有同样的问题与LibertyCore服务器我添加此功能在server.xml和它的工作为我

<feature>javaMail-1.6</feature>
鲍理
2023-03-14

这是发送带有附件的多部分消息的示例:

String from = "from@example.com";
String to = "to@example.com";
File file = new File("/file/to/attach");

Properties mailProps = new Properties();
// put your properties here
Session session = Session.getInstance(mailProps, null);

try {
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from) );
 InternetAddress[] toAddress = { new InternetAddress(to) };
 message.setRecipients(Message.RecipientType.TO, toAddress);
 message.setSubject("Demo Message");
 message.setSentDate(new Date());

 MimeBodyPart part1 = new MimeBodyPart();
 part1.setText("Test");

 MimeBodyPart part2 = new MimeBodyPart();
 part2.attachFile(file);

 Multipart multiPart = new MimeMultipart();
 multiPart.addBodyPart(part1);
 multiPart.addBodyPart(part2);

 message.setContent(multiPart);

 Transport.send(message);

} catch( MessagingException e ) {
  // handle the exception properly
  e.printStackTrace();
}

希望有帮助。

马晓博
2023-03-14

事实证明,我遇到了多个问题:

  1. 教程问题

它使用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);
}

相应地调整代码使其工作。

 类似资料:
  • 问题:是否有人从SMTP服务器通过JavaMail成功地向hotmail帐户发送电子邮件?如果是这样的话,你能提出有效的代码吗? 我可以使用我的JavaMail代码向gmail和yahoo帐户发送电子邮件,但我不能向hotmail帐户发送任何电子邮件。如果我使用手机或其他电子邮件客户端,并使用与JavaMail代码相同的SMTP服务器,那么我确实可以向hotmail帐户发送电子邮件。这让我相信Ja

  • 我有一个Outlook.com的电子邮件帐户。我希望我的Java应用程序能够使用JavaMail从该电子邮件帐户发送电子邮件。为此,我通过OAuth授予了我的应用程序访问权限。 我已经能够使用msgshow中提供的精彩示例应用程序通过IMAP成功连接.java。但是,我正在尝试通过SMTP通过我的 Outlook.com 电子邮件帐户发送电子邮件,但我没有任何运气。我尝试过同时使用msgsend.

  • 我需要通过我的应用程序发送一封电子邮件,比如使用带有OAuth的javamail API,但我需要如何使用我在下面添加的代码。 我的代码:

  • 我在使用我的公司交换服务器通过Javamail发送电子邮件时遇到了一些问题。我们有一个应用程序通过gmail服务器发送电子邮件没有任何问题,但对于Google策略的一些更改,我们希望使用公司服务器来完成这项工作。我确信会话属性中的问题,但我无法找到使其工作的方法 这是显示日志的错误 javax.mail.MessagingException:无法连接到SMTP主机:mail.company.com

  • 这是我发送邮件的代码 我在tomcat的lib文件夹中添加了和。我将eclipse与Tomcat7、JRE7和Struts2一起使用。通过Java发送邮件时出现以下控制台错误:

  • 我有以下代码: 我无法连接到gmail,连接出现错误,但是所有连接信息都是正确的,不知道是什么阻止了我发送电子邮件的代码中的连接,我无法发送简单的电子邮件,我一点也不知道它是什么。 感谢您的帮助