我正在 java quarkus 中创建一个 AWS Lambda 函数。
我使用 java mail 和 Amazon SES 发送电子邮件。
我添加了所有必需的依赖项,并且在通过邮递员进行本地测试时运行完全正常。我收到了电子邮件中的所有 pdf 文件附件。但每当我尝试在 AWS Lambda 控制台中进行测试时,我都会得到以下信息:
mime 类型多部分/混合没有对象 dch
我尝试添加线程来加载类,并且:
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content- handler=com.sun.mail.handlers.message_rfc822");
但目前还没有运气。有人知道解决办法吗?
我对 Java 和 Lambda 相当陌生,但是当 JavaMail 库无法找到指定 MIME 类型的 DataContentHandler 时,会出现错误“no object dch for mime type multipart/mixed”。在这种情况下,在 AWS Lambda 控制台中运行代码时会发生这种情况,但通过 Postman 进行本地测试时不会发生这种情况。这表明 AWS Lambda 控制台中的环境配置可能存在问题。
一种解决方案是确保AWS Lambda函数的部署包中包含必要的库。在本地测试时,所有必需的库可能都存在于类路径中,但在 AWS Lambda 环境中可能并非如此。确保部署包中包含所有必需的依赖项,并且类路径设置正确。
另一个解决方案是显式注册 MIME 类型“multipart/mixed”的 DataContentHandler。这可以通过创建 javax.activation.DataContentHandler 接口的自定义实现并将其注册到 JavaBeans Activation Framework (JAF) 来完成。这是一个示例实现(未经测试的代码):
import javax.activation.*;
import java.io.*;
public class MyDataContentHandler implements DataContentHandler {
public MyDataContentHandler() {
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { new DataFlavor("multipart/mixed") };
}
public Object getTransferData(DataFlavor flavor, DataSource dataSource)
throws UnsupportedFlavorException, IOException {
if (flavor.equals(new DataFlavor("multipart/mixed"))) {
return dataSource.getInputStream();
} else {
throw new UnsupportedFlavorException(flavor);
}
}
public Object getContent(DataSource dataSource) throws IOException {
return dataSource.getInputStream();
}
public void writeTo(Object object, String mimeType, OutputStream outputStream)
throws IOException {
throw new UnsupportedEncodingException("writeTo() not supported");
}
}
然后,在发送电子邮件之前,在 Lambda 函数代码中向 JAF 注册自定义 DataContentHandler:
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("multipart/mixed;; x-java-content-handler=com.example.MyDataContentHandler");
CommandMap.setDefaultCommandMap(mc);
这应该为 MIME 类型“multipart/mixed”注册自定义 DataContentHandler 并解决问题。
确保检查 AWS Lambda 环境配置并在部署包中包含所有必需的依赖项,以确保必要的库在运行时可用。
我也面临着同样的问题。基于上述解决方案有人能解决这个问题吗?我正在寻找解决方案,请。