Xpages - java.lang.NoSuchMethodError: javax/mail/internet/MimeBodyPart.attachFile(Ljava/io/File;)V

Xpages - java.lang.NoSuchMethodError: javax/mail/internet/MimeBodyPart.attachFile(Ljava/io/File;)V

我想在向收件人发送电子邮件时包含附件。我已经能够设置和获取附件,但是当从 Javaxmail 调用 attachFile 方法时我收到一个错误。

此代码是使用 javax 库在 Java 中编写的。

一切似乎都很好,但失败了。我也尝试过添加编码,但结果相同。

当调用 attachFile 方法时,此代码失败。

attachPart.attachFile(f); // fails here...


try {
Message msg = new MimeMessage(propsSess);
msg.setFrom(new InternetAddress(this.defaultSenderAddress));

setRecipient(msg, this.sendTo, "to");
msg.setSubject(this.subject);
msg.setContent(this.bodyHtml, "text/html");
msg.setHeader("X-Mailer", "Java Agent");
msg.setSentDate(new Date());

if (!this.bodyAttach.isEmpty()) {
    BodyPart messageText = new MimeBodyPart();
    messageText.setText(this.bodyHtml);

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageText);

    // adds attachments 
    for (int index = 0; index < this.bodyAttach.size(); index++) {
        MimeBodyPart attachPart = new MimeBodyPart();
        try {
            System.out.println(this.bodyAttach.get(index)); // shows only 1st attachments
            File f = new File(this.bodyAttach.get(index));

            attachPart.attachFile(f); // fails here...
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        multipart.addBodyPart(attachPart);
    }

    // sets the multi-part as e-mail's content
    msg.setContent(multipart);
}
SMTPTransport transport = (SMTPTransport) propsSess.getTransport("smtp");
transport.connect(this.smtpServerAddress, null, null);
if (transport.isConnected()) {
    transport.sendMessage(msg, msg.getAllRecipients());
    transport.close();
    this.processMessage.add("success");
}
} catch (Exception e) {
this.processMessage.add(databaseTitle + ": SmtpMail bean: Message or SMTPTransport error");
return false;
}

javax.mail 是 Domino 上的地雷。通过 "ndext" 目录中的 "mail.jar" 以及 OSGi 领域中的 com.ibm.designer.lib.javamail 插件,它是 ,但那是版本 1.3的规范。不幸的是,您尝试使用的方法是在 1.4 中添加的。

您可以通过为更新版本的 javax.mail+ 其实现添加一个 jar 来绕过它,但我还没有尝试过,所以我不能肯定地说。无论如何,这可能是您已经尝试过的,以访问 类。您也可以尝试将此代码放入 OSGi 插件并将 javax.mail jar 嵌入其中,或者将其作为版本范围受限的外部 OSGi 插件。

您也可以使用 Notes API 发送电子邮件,尽管这样您将使用 Domino 服务器来路由电子邮件而不是自定义 SMTP 服务器(除非 Domino 恰好配置为通过反正那个服务器)。