繁体   English   中英

使用JavaMail读取电子邮件附件-读取“ winmail.dat”而不是实际附件

Reading Email Attachments Using JavaMail - Reading 'winmail.dat' Rather Than Actual Attachment

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试构建一个使用javax.mail API的客户端来读取电子邮件,包括附件。 我最初的想法是使用Tika库。 当产生意外结果时(请参阅下面的代码和详细信息),我尝试使用此问题中提出的代码的变体。

我的阅读电子邮件功能:

    // Reference: https://www.tutorialspoint.com/javamail_api/javamail_api_checking_emails.htm
public class CheckingMails {

    public static void check(String host, String storeType, String user, String password) {
        try {

            // create properties field
            Properties properties = new Properties();

            properties.put("mail.pop3.host", host);
            properties.put("mail.pop3.port", "110");
            Session emailSession = Session.getInstance(properties);
            Store store = emailSession.getStore("pop3");
            store.connect(host, user, password);
            Folder emailFolder = store.getFolder("INBOX");
            emailFolder.open(Folder.READ_WRITE);

            // retrieve the messages from the folder in an array and print it
            Message[] messages = emailFolder.getMessages();

            System.out.println("messages.length---" + messages.length);

            for (int i = 0, n = messages.length; i < n; i++) {
                Message message = messages[i];

                Object content = message.getContent();
                if (content instanceof java.lang.String) {
                    System.out.println((String) content);
                } else if (content instanceof Multipart) {
                    Multipart mp = (Multipart) content;

                    for (int j = 0; j < mp.getCount(); j++) {
                        Part part = mp.getBodyPart(j);

                        String disposition = part.getDisposition();

                        if (disposition == null) {
                            // Check if plain
                            MimeBodyPart mbp = (MimeBodyPart) part;
                            if (mbp.isMimeType("text/plain")) {
                                System.out.println("Mime type is plain");
                                System.out.println((String) mbp.getContent());
                            } else {

                                // Special non-attachment cases here of
                                // image/gif, text/html, ...

                                System.out.println("File name is " + part.getFileName());

                            }
                        } else if ((disposition != null)
                                && (disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE))) {
                            // Check if plain
                            MimeBodyPart mbp = (MimeBodyPart) part;
                            if (mbp.isMimeType("text/plain")) {
                                System.out.println("Mime type is plain");
                                System.out.println((String) mbp.getContent());
                            } else {
                                System.out.println("Save file " + part.getFileName());

                            }
                        }
                    }
                }

                System.out.println("Tika results " + parseMsg(message));

            }

            // close the store and folder objects
            emailFolder.close(false);
            store.close();

        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

当我通过发送带有简单CSV附件的测试消息来测试程序时,Tika解析器将输出以下内容(为简洁起见被截断):

    ------=_NextPart_000_0028_01D47C16.81FB45C0
    Content-Type: application/ms-tnef;
        name="winmail.dat"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment;
        filename="winmail.dat"

    eJ8+IhUSAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy
    b3NvZnQgTWFpbC5Ob3RlADEIAQOQBgCgDQAANgAAAAsAAgABAAAAAwAmAAAAAAALACkAAAAAAB4A
    cAABAAAABQAAAFRlc3QAAAAAAgFxAAEAAAAWAAAAAdR8SMswwghurPF+SpeO8uRrTzrhCgAACwAB
    DgAAAAACAQoOAQAAABg..... 

------=_NextPart_000_0028_01D47C16.81FB45C0--

代码的另一部分(检查消息的处置)输出类似于以下内容的内容:

 messages.length---1
Mime type is plain



Email Boday



Save file winmail.dat

为什么应用程序读取/识别winmail.dat,而不是与消息一起实际发送的附件(CSV文件)?

谢谢你的帮助。

问题暂未有回复.您可以查看右边的相关问题.
3 提取 winmail.dat 信息而不是附件

我一直在使用TNEF从Outlook发送的RTF电子邮件中提取附件,但我想知道有没有办法提取有关其中包含的其他信息的信息? 更准确地说,我是在谈论投票按钮以及它可能包含的任何其他内容? ...

4 如何从VIEW Intent中读取电子邮件附件

我正在尝试在我的Android应用中阅读电子邮件附件。 Intent过滤器正在工作:当我在GMail应用程序中点击附件时,我的应用程序被列为打开附件的候选对象之一,当我选择它时,将调用适当的Activity的onCreate()方法。 但是,当我尝试从Intent中读取数据时,出现FileN ...

6 从保存的电子邮件附件中读取kml文件

我已经在我的应用程序中设置了文件“导入-导出”过程(使用gmail客户端),该过程将允许用户在彼此之间甚至在设备之间共享kml文件。 请阅读用户执行的步骤以最好地理解。 归档流程: 1)用户在地图上添加地标。 2)用户使用用户定义的名称(例如“ Saved.kml”)以kml格式 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM