apache-commons-email - 如何在 Apache Commons Email 1.4 中接收并区分常规附件和内联附件

标签 apache-commons-email

目前我们收到一封电子邮件,该电子邮件由

解析
MimeMessageParser mimeMessageParser = parse(message);

然后用

拉出附件
 if (mimeMessageParser.hasAttachments()) {
     List<DataSource> attachments = mimeMessageParser.getAttachmentList();
     for (DataSource dataSource : attachments) {
         saveAttachment(dataSource, subjectLineProperties, documentToUpload, firstHeaders);
     }
 }

问题是 getAttachmentList 还返回内联图像,例如签名行中的企业 Logo ,并且我们不想将内联图像作为附件取出。我们只想要实际的电子邮件附件。 ATTACHMENT 与 INLINE,但我们也无法通过 Apache Commons Email 1.4 版本访问 java.mail 配置,并且找不到解决方案。我检查了他们的文档https://commons.apache.org/proper/commons-email/javadocs/api-1.4/index.html

运气不好。附件数据源似乎只允许我获取内容以及内容类型和名称,但如果它是内联附件/图像或像 Mime Parts 那样的常规附件,则不允许。

最佳答案

我的印象是,有一种解决方法,无需进入较低级别...但我还没有检查所有附件类型 - 仅检查图像。像这样的事情:

for(DataSource ds : mimeMessageParser.getAttachmentList()) {
    for(String id : mimeMessageParser.getContentIds()) {
        if(ds == mimeMessageParser.findAttachmentByCid(id)) {
            // It is inline attachment with Content ID
            break;
        }
    }
    // If not found - it is file attachment without content ID
}

关于apache-commons-email - 如何在 Apache Commons Email 1.4 中接收并区分常规附件和内联附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52373411/

相关文章:

java - 从 .eml 文件获取文本的最佳方法是什么?

Java 邮件附件在 Tomcat 上不起作用

java - 使用 commons-email 配置模拟电子邮件

java - Apache Commons Email 安装在 Eclipse : cannot be resolved

java - Apache Commons Email,如何使用 Content-Transfer-Type 作为 quoted-printable 发送电子邮件附件?

java - 在 Apache Commons Mail 中设置退回地址

java - 卡在 send() 上的共享电子邮件示例

java - Apache Commons 电子邮件使用 base64 编码附加

java - Gmail 中带有附件 : html is attached as noname. html 的 Apache commons-mail HtmlEmail

java - 无法在 Apache Commons Mail 上将套接字转换为 TLS