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 恰好配置为通过反正那个服务器)。
我想在向收件人发送电子邮件时包含附件。我已经能够设置和获取附件,但是当从 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 恰好配置为通过反正那个服务器)。