java - 在Java中以Outlook邮件格式保存邮件

标签 java javamail pop3

我有以下程序,该程序充当用POP3协议配置的邮箱侦听器,执行该程序时,它将连接到邮箱,并在指定的文件夹中下载所有邮件和附件。

但是现在我的查询是,现在将邮件正文作为单独的文本文件下载,还将邮件附件也单独下载,我一直在寻找的是,当我的程序执行时,应以Outlook消息格式下载电子邮件,即打开时出现的格式将邮件放入Outlook中并将其保存在文件夹中,然后选择“另存为”选项,然后询问您要以哪种格式保存邮件,然后选择“ Outlook邮件格式”选项,然后将该邮件保存在Outlook邮件中自行格式化,因此请建议将邮件保存为Outlook邮件格式,我需要在以下程序中进行哪些更改

import java.io.*;
import java.util.*;
import javax.mail.*;

import javax.mail.internet.MimeBodyPart;

public class ReceiveMailPOP3 {
    private static final String HOST = "pop.gmail.com";
    private static final String USERNAME = "myemail@gmail.com";
    private static final String PASSWORD = "******";

    public static void doit() throws MessagingException, IOException {
        Folder folder = null;
        Store store = null;
        try {
            Properties props = new Properties();
            props.put("mail.store.protocol", "pop3s"); // Google uses POP3S not POP3
            Session session = Session.getDefaultInstance(props);
            // session.setDebug(true);
            store = session.getStore();
            store.connect(HOST, USERNAME, PASSWORD);
            folder = store.getDefaultFolder().getFolder("INBOX");
            folder.open(Folder.READ_ONLY);
            Message[] messages = folder.getMessages();
            System.out.println("No of Messages : " + folder.getMessageCount());
            System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
            for (int i=0; i < messages.length; ++i) {
                System.out.println("MESSAGE #" + (i + 1) + ":");
                Message msg = messages[i];
                String from = "unknown";
                if (msg.getReplyTo().length >= 1) {
                    from = msg.getReplyTo()[0].toString();
                }
                else if (msg.getFrom().length >= 1) {
                    from = msg.getFrom()[0].toString();
                }
                String subject = msg.getSubject();
                System.out.println("Saving ... " + subject +" " + from);
                // you may want to replace the spaces with "_"
                // the files will be saved into the TEMP directory
                String filename = "c:/temp/" +  subject;
                saveParts(msg.getContent(), filename);
            }
        }
        finally {
            if (folder != null) { folder.close(true); }
            if (store != null) { store.close(); }
        }
    }

    public static void saveParts(Object content, String filename)
        throws IOException, MessagingException
        {
            OutputStream out = null;
            InputStream in = null;
            try {
                if (content instanceof Multipart) {
                    Multipart multi = ((Multipart)content);
                    int parts = multi.getCount();
                    for (int j=0; j < parts; ++j) {
                        MimeBodyPart part = (MimeBodyPart)multi.getBodyPart(j);
                        if (part.getContent() instanceof Multipart) {
                            // part-within-a-part, do some recursion...
                            saveParts(part.getContent(), filename);
                        }
                        else {
                            String extension = "";
                            if (part.isMimeType("text/html")) {
                                extension = "html";
                            }
                            else {
                                if (part.isMimeType("text/plain")) {
                                    extension = "txt";
                                }
                                else {
                                    //  Try to get the name of the attachment
                                    extension = part.getDataHandler().getName();
                                }
                                filename = filename + "." + extension;
                                System.out.println("... " + filename);
                                out = new FileOutputStream(new File(filename));
                                in = part.getInputStream();
                                int k;
                                while ((k = in.read()) != -1) {
                                    out.write(k);
                                }
                            }
                        }
                    }
                }
            }
            finally {
                if (in != null) { in.close(); }
                if (out != null) { out.flush(); out.close(); }
            }
        }

    public static void main(String args[]) throws Exception {
        ReceiveMailPOP3.doit();
    }
} 

最佳答案

保存消息后,您希望如何处理该消息?

您可以将邮件保存在Outlook可以打开的“ .eml”文件中。使用Message.writeTo方法。

关于java - 在Java中以Outlook邮件格式保存邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31364156/

相关文章:

java - 我如何在 portlet 中获得 Liferay 的 Hibernate Session 实现?

java - Javamail-android商用

java - 使用javamail发送邮件时出错

c++ - 是否有用于通过 pop 阅读电子邮件的 C 或 C++ 可嵌入库?

java - 使用 pop3 按日期降序获取邮件

java - jnlp文件可以根据服务器的响应动态生成吗?

java - 什么是NullPointerException,我该如何解决?

C OpenSSL 登录 POP 邮件服务器

java - 用Java读取属性文件