通过 Java 发送邮件时出现异常

Posted

技术标签:

【中文标题】通过 Java 发送邮件时出现异常【英文标题】:Getting exception while sending mail through Java 【发布时间】:2018-06-24 21:26:23 【问题描述】:

例外是::

Exception in thread "main" java.lang.NoSuchMethodError: 
com.sun.mail.util.LineOutputStream.<init>(Ljava/io/OutputStream;Z)V
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1648)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1906)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1134)
at javax.mail.Transport.send0(Transport.java:255)
at javax.mail.Transport.send(Transport.java:124)
at com.yodlee.SendMail.sendMail(SendMail.java:78)
at com.yodlee.SendMail.main(SendMail.java:32)

这里是 Java 代码::

    Properties props = new Properties();
    props.put(SMTP_HOST_KEY,SMTP_HOST);

    Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() 
        protected PasswordAuthentication getPasswordAuthentication() 
            return new PasswordAuthentication(".....",
                    "#.......");
        
    );

    try 
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(RECIPIENT_FROM));
        message.setSubject(SUBJECT);
        message.setSentDate(new Date());
        //message.setText("Test mails111");


        MimeBodyPart messageBodyPart = new MimeBodyPart();

        messageBodyPart.setContent(data, "text/html");
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);
        message.setContent(multipart);
        Transport.send(message);
        System.out.println("Done");
     catch (MessagingException e) 
        status = -1;
        throw new RuntimeException(e);
    

Transport.send(msg) 出现错误; 我在这里使用的罐子:: smtp 1.6.0, Javax Mail 1.4.7, mailactivation

【问题讨论】:

你设置mime类型了吗? 显然部件的顺序根据多部分 MIME 规范很重要,根据这个问题:***.com/questions/14744197/… 【参考方案1】:

我解决了这个问题: java.lang.NoSuchMethodError: 'void com.sun.mail.util.LineOutputStream.(java.io.OutputStream, boolean)'

在我的 pom.xml 中添加了与 javax.mail-api 相同版本的依赖项 com.sun.mail

<dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.6.2</version>
    </dependency>

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

【讨论】:

【参考方案2】:

您的类路径上很可能有多个版本的 JavaMail 类。检查所有依赖项和应用程序服务器环境是否存在冲突。如果多个 jar 文件包含 javax.mail.* 或 com.sun.mail.* 类,则有问题。

并且一定要修复所有这些common JavaMail mistakes,并且一定要确保使用latest version of JavaMail。

【讨论】:

【参考方案3】:

检查你的jar的版本,尝试更改一些版本,如果是'maven项目',请检查环境依赖。如您所知,java的环境通常会出现错误,请注意。

【讨论】:

我已经尝试使用 javax mail 1.4.7、1.5.1、1.6.0,但我仍然收到错误

以上是关于通过 Java 发送邮件时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过电子邮件发送多个附件时出现 ActivityNotFoundException

通过 PHPMailer 发送电子邮件时出现身份验证错误

尝试通过 Office 365 发送电子邮件时出现 SMTP 5.7.57 错误

使用 JavaMail API 时出现 SSLException

Java Mail:在没有 SSL 的端口 25 上发送电子邮件时出现 SSLHandshakeException

通过 Firebase 函数发送电子邮件时出现 Firebase SendGrid 错误 - 错误:错误请求