当前位置: 首页 > 面试题库 >

Session.getInstance的Java邮件问题

东门理
2023-03-14
问题内容

尝试使用Java邮件时,我收到以下异常;

java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
    at javax.mail.Session.initLogger(Session.java:226)
    at javax.mail.Session.<init>(Session.java:210)
    at javax.mail.Session.getInstance(Session.java:247)
    at com.secondstory.mailsender.MailSender.createSmtpSession(MailSender.java:67)
    at com.secondstory.mailsender.MailSender.sendSimpleMessage(MailSender.java:38)
    at com.secondstory.mailsender.MailSender.generateLostPasswordEmail(MailSender.java:79)
    at com.secondstory.mailsender.MailSenderTest.shouldReturnTrueWithCredentialsSet(MailSenderTest.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    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:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 30 more

广泛搜索堆栈溢出后(也许不够广泛,让我们看看!),我发现我们需要在maven pom内放入两个jar来完成这项工作。我的两个依赖关系如下:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

某些情况已更改,但我不完全确定它是什么-之前已奏效。我在该元素失败的地方编写的代码如下:

private static Session createSmtpSession() {
    final Properties props = new Properties();
    props.setProperty("mail.host", "host");
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.smtp.starttls.enable", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    //props.setProperty("mail.debug", "true");

    return Session.getInstance(props, new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(
                            "username", "password");
                }
            });
}

我是否缺少某些配置,还是应该使用我当前的设置?

谢谢


问题答案:

尝试将其添加到Maven POM中:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.2</version>
</dependency>


 类似资料:
  • 本文向大家介绍Java实现邮件发送遇到的问题,包括了Java实现邮件发送遇到的问题的使用技巧和注意事项,需要的朋友参考一下 发送邮件的代码是我从以前的一个应用上直接拷贝过来的。以前使用的腾讯的邮件服务,程序执行起来没有任何问题。后来修改为微软office365邮件服务后,却遇到了两个问题。 问题一,tls加密设置 异常信息如下: 这个解决起来比较容易。找了些资料,添加如下配置即可: 问题二,提示协

  • 我已经在我的应用程序中设置了类,根据用户的姓名电子邮件和消息发送邮件。它在应用程序中似乎运行良好,但没有实际的电子邮件被发送。有人能帮忙吗?事先谢谢你。 以下是我设置的Gmail类: 公共级GMail{ } 这是我的SendMailTask课程 公共类SendMailTask扩展了AsyncTask{ } 下面是我试图从中获得邮件的班级: 公共类HelpPage扩展AppCompatActive{

  • 我将使用java邮件api来处理雷鸟等邮件。我必须取1000封邮件。我的设计是:当用户在文件夹上执行同步时,我会得到文件夹中所有消息的uid: 然后,我将把UID列表与数据库中存储的列表进行比较。例如,对于已删除的邮件,邮件不在文件夹中,但在数据库中,我会将其标记为已删除。例如,对于新邮件,文件夹中有一条消息,但数据库中没有,我将标记为可能的新邮件。但是,由于MessageUID是不安全的(在某些

  • 我正在编写一个具有交叉源配置的API 我的websecurity配置有 控制器类 身份验证过滤器检查 匹配。匹配总是变假 我是不是漏掉了什么? 我添加了什么额外的参数吗? 期待着迅速的回应。

  • 我有一个问题,过多的填充出现在表周围或移动图像与超文本标记语言的电子邮件签名,我无法找到解决方案。 我必须尝试我研究过的每一个解决方案,包括: 将显示:块添加到图像中 这个问题似乎出现在我测试过的三星和苹果设备上。 如有任何新建议,将不胜感激。 特别具有额外间距的图像如下所示: 我有两个并列的表,这可能是问题的原因,因此整个代码是怎样的:

  • 本文向大家介绍java邮件发送的实现,包括了java邮件发送的实现的使用技巧和注意事项,需要的朋友参考一下 邮件是在日常生活中,这篇文章主要介绍了java实现基于SMTP发送邮件的方法,实例分析了java基于SMTP服务发送邮件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 1.写一个 MailSendProper 类封装需要的属性 2、写一个  EmailMessage 封装 发送信息