javamail还提取封装消息的附件内容类型:message/rfc822

2024-03-10

我想提取封装在消息 InputStream 中的 .eml 消息的所有附件(内容类型:message/rfc822)

InputStream is = new FileInputStream(Path);
MimeMessage mime = new MimeMessage(null, is);



 private  String getAttachments(p) throws
                MessagingException, IOException {


if ( p.isMimeType("multipart/*")) {
                    Multipart multiPart = (Multipart) p.getContent();
                    int numberOfParts = multiPart.getCount();
                    for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
String disp = part.getDisposition();
 if (disp != null && disp.equalsIgnoreCase(Part.ATTACHMENT)  {
    file_name =   part.getFileName();
    part.saveFile(Attachments_Folder + "\\" + MailFileName + "_" + file_name);
     }
     }
  }
}
is.close()

另外,当 Content-Type 为 message/rfc822 时,part.getFileName() 为 null,因此保存的文件没有扩展名,我不知道如何获取此扩展名。


我通过将新文件名作为 .eml 文件添加到包含的消息中并使用包含的消息进行递归来完成此操作

import java.util.*;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.*;
import java.io.FileInputStream.*;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.Part;
import javax.mail.Multipart;

getAttachments(Path) ;
  //function
private  String getAttachments(path) throws
    MessagingException, IOException {
    InputStream is = new FileInputStream(path);
    MimeMessage p = new MimeMessage(null, is);

    if ( p.isMimeType("multipart/*")) {
// if (contentType.contains("multipart")) {
                    Multipart multiPart = (Multipart) p.getContent();
                    int numberOfParts = multiPart.getCount();
                    for (int partCount = 0; partCount < numberOfParts; partCount++) {
            MimeBodyPart part = (MimeBodyPart)multiPart.getBodyPart(partCount);
            String disp = part.getDisposition();

            if (disp != null && disp.equalsIgnoreCase(Part.ATTACHMENT)) {
            file_name =  part.contentType == "message/rfc822" ? "message_inclus" + partCount + ".eml" :             MimeUtility.decodeText(part.getFileName());
            exportedpath = Attachments_Folder + "/" + MailFileName + "_" + file_name; 
            part.saveFile(exportedpath);
            if ( part.contentType == "message/rfc822" ) {
            getAttachments(exportedpath) 
            }
            }
        }
    }
    is.close() 
    return 1
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javamail还提取封装消息的附件内容类型:message/rfc822 的相关文章

  • JavaMail 未在 jetty:run-war 下发送主题或发件人

    有没有人见过 JavaMail 没有根据 JVM 的启动方式向 SMTP 服务器发送正确的 MimeMessages 归根结底 我无法发送带有 主题 或 发件人 字段的 JavaMail SMTP 消息 并且仅当将应用程序作为战争运行时 似
  • 将 JavaMail 与自签名证书结合使用

    我有一个包含以下代码的 servlet System setProperty javax net ssl keyStore getServletContext getRealPath keystore jks System setPrope
  • 创建一个数字数组而不循环?

    好的 我正在使用 JavaMail 库 并且我正在尝试获取某些消息号 我想高效地完成它 而不必在某件事上循环两次 无论如何 我对你的问题是 如何创建一个从索引开始的数组x并以索引结束x 11不循环 如果你想创建并填充一个数组 你基本上有三个
  • javax 邮件:UTF-8 编码问题

    我已经看到了几个与此相关的问题 但没有一个能解决我的问题 我有一封带有 pdf 附件的中文电子邮件 所有文本在包含在多部分电子邮件中之前都是有效的 UTF 8 Problem 电子邮件中的文本到达收件人时是垃圾字符 电子邮件标头显示其编码不
  • 带有附件的 Java 邮件:javax.mail.Multipart 上的 ClassCastException

    我使用以下代码从邮件下载附件 但它给出了ClassCastException关于多部分声明 线程 main 中的异常 java lang ClassCastException com sun mail imap IMAPInputStrea
  • Javamail 和 Javafx。阅读并显示邮件嵌入图像

    我使用名为WebEngine javafx 的控件来显示javamail下载的邮件内容 当内容是纯文本或带有图像 src http 链接的 html 时 这很好 但是当邮件嵌入图像 src 中有内容 id 时 控件不会显示此图像 当然 因为
  • 使用 Javamail API 和 IMAP 批量获取邮件正文

    有没有一种方法可以通过使用 Javamail API 对 IMAP 服务器进行一次调用来获取多封电子邮件的邮件正文 我知道我可以使用 Message getContent 调用获取给定消息的正文 但这最终会为每个单独的消息调用 imap 服
  • Java邮件超时和连接超时处理

    我正在使用 JavaMail 将电子邮件请求发送到 SMTP 服务器 我想同时设置 邮件 smtp 连接超时 and 邮件 smtp 超时 我的代码中的属性 以编程方式 我想在以下情况下捕获两者timeout and or 连接超时Java
  • 从 InternetAddress 打印发件人的电子邮件地址

    这是获取的代码sender和subject使用此代码 我看到显示了正确的主题 但我看到发件人的地址以不同的格式显示 Properties props new Properties props put mail imap host imap
  • JAVAMAIL:AUTH NTLM 失败

    我尝试使用微软交换服务器在本地网络中用java发送电子邮件 这是我的代码 import java io UnsupportedEncodingException import java util Properties import java
  • JavaMail 无法在 Amazon EC2 上运行

    PROBLEM 我正在尝试使用 JavaMail 从 EC2 Ubuntu 12 04 服务器发送电子邮件 但它不起作用 背景 我打算从 Tomcat 服务器向一些团队成员发送自动生成的邮件 我使用 JavaMail 1 4 7 来完成这项
  • 通过 Java Mail API 发送电子邮件时出错?

    尝试通过 Java Mail API 发送电子邮件时出现以下错误 这个错误是什么意思 javax mail MessagingException Exception reading response nested exception is
  • 模拟 javax.mail.Transport

    无需创建另一个我可以注入的类 是否可以嘲笑javax mail Transport所以我可以做一些模拟测试Transport send Java EE 7 上的方法 由于 Dumbster 没有当前可用的 Maven Central 工件
  • Javamail 1.5.1、Tomcat 7 和 java.lang.ClassNotFoundException:javax.mail.Authenticator

    我尝试将 Javamail 1 5 1 与 Tomcat 7 和 Eclipse Kepler 一起使用 当我尝试发送电子邮件时 Tomcat 崩溃并出现以下错误 从文档中 我了解到我需要的所有内容现在都在 javax mail jar 中
  • 如何阅读带有附件的消息并保存内容字符串中的附件?

    我正在使用 java mail 从 gmail 获取带有附件的电子邮件 附件在内容中以字符串形式出现 我如何将其转换为文件 Thanks 这是我得到的 Content begin 644 myfile csv M E T871U
  • 为带有附件的电子邮件设置多部分

    从我的应用程序中 我发送带有附件的邮件 完整的代码在这里 public int sendMail MailDraft mailDraftInstance mailInstance path Send the mail String mail
  • 在 Windows 上使用 Java 处理 MailDir 格式时出现问题

    这确实是两个问题 但它们密切相关 我正在开发一个 Java 应用程序 它将处理以 UNIX 风格 MailDir 格式存储的电子邮件 我正在使用 JavaMail API 发现Java邮件目录 http javamaildir source
  • 使用 javax 邮件发送消息的时间不正确

    问候大家 我有一个问题 当使用 javax mail 从服务器向客户端发送电子邮件时 并将发送日期设置为 message setSentDate new Date 电子邮件在服务器时间发送 客户立即收到邮件 时间是5小时前 如何解决这个问题
  • com.sun.mail.smtp.SMTPSenderFailedException: 550 5.7.1 客户端无权作为此发件人发送

    我正在尝试从以下位置发送电子邮件申请电子邮件 交换服务器 并显示给用户 因为它是从另一封电子邮件 using javamail 我正在使用以下代码 public void sendEmail String from String to St
  • Javamail 无法收到所有邮件

    我试图获取我的 Gmail 的所有邮件 但只能获取 250 封 根据https javaee github io javamail FAQ gmailsettings https javaee github io javamail FAQ

随机推荐