【问题标题】:Create a .eml (email) file in Java在 Java 中创建一个 .eml(电子邮件)文件
【发布时间】:2010-09-14 12:08:22
【问题描述】:

有人知道怎么做吗?我得到了电子邮件的所有信息(正文、主题、发件人、收件人、抄送、密件抄送),需要从中生成一个 .eml 文件。

【问题讨论】:

    标签: java email outlook eml


    【解决方案1】:

    如果你想添加 HTML Stuff,你必须添加

    content.setHeader("Content-Type", "text/html"); 
    

    (正如马可苏拉所说)但也要改变

    message.setContent(multipart);
    

    message.setContent(multipart,"text/html");
    

    【讨论】:

      【解决方案2】:

      您可以构造javax.mail.Message 对象(或已经从邮件服务器构造),然后您可以使用writeTo() 方法将其保存到文件中。 请参阅JavaMail API 了解更多信息。

      【讨论】:

      • ... 包 javax.mail 不存在
      • @Supuhstar - 旧线程,但对于其他阅读本文的人来说,这依赖于 javamail API。
      【解决方案3】:

      您可以使用以下代码创建 eml 文件。它适用于雷鸟,可能适用于其他电子邮件客户端:

      public static void createMessage(String to, String from, String subject, String body, List<File> attachments) {
          try {
              Message message = new MimeMessage(Session.getInstance(System.getProperties()));
              message.setFrom(new InternetAddress(from));
              message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
              message.setSubject(subject);
              // create the message part 
              MimeBodyPart content = new MimeBodyPart();
              // fill message
              content.setText(body);
              Multipart multipart = new MimeMultipart();
              multipart.addBodyPart(content);
              // add attachments
              for(File file : attachments) {
                  MimeBodyPart attachment = new MimeBodyPart();
                  DataSource source = new FileDataSource(file);
                  attachment.setDataHandler(new DataHandler(source));
                  attachment.setFileName(file.getName());
                  multipart.addBodyPart(attachment);
              }
              // integration
              message.setContent(multipart);
              // store file
              message.writeTo(new FileOutputStream(new File("c:/mail.eml")));
          } catch (MessagingException ex) {
              Logger.getLogger(Mailkit.class.getName()).log(Level.SEVERE, null, ex);
          } catch (IOException ex) {
              Logger.getLogger(Mailkit.class.getName()).log(Level.SEVERE, null, ex);
          }
      }
      

      【讨论】:

      • 要保存html消息,请添加content.setHeader("Content-Type", "text/html");
      【解决方案4】:

      查看一个典型的 EML 文件,它看起来像是发送到服务器的文本通信的原始转储。所以它是一个包含邮件标题和正文的文本文件。要在 EML 文件中以正确格式获取附件、不同视图等,您需要对正文及其部分进行 MIME 编码。

      【讨论】:

        【解决方案5】:

        EML 文件只是纯文本文件。标题与正文用空行分隔。标头如下所示:

        From: "DR CLEMENT OKON" <drclement@nigerianspam.com>
        To: "You" <you@yourdomain.com>
        Subject: REQUEST FOR URGENT BUSINESS RELATIONSHIP 
        Date: Tue, 30 Sep 2008 09:42:47 -0400
        

        更多信息,官方规范是RFC 2822。它实际上并不像某些 RFC 那样难以阅读。

        编辑:当我说“纯文本”时,我应该想一想。我真正的意思是纯 ASCII - 而不是 8 位“扩展 ASCII” - 最多字符 127。如果你想要超过 7 位,你需要某种编码,事情会变得复杂。

        【讨论】:

          猜你喜欢
          • 2020-05-23
          • 2014-09-05
          • 2013-06-16
          • 2015-12-28
          • 1970-01-01
          • 2012-02-05
          • 1970-01-01
          • 2012-09-17
          • 2018-04-26
          相关资源
          最近更新 更多