java - 使用 Java 从 Microsoft 邮件 Exchange 服务器读取带有附件的邮件

标签 java server exchange-server

我一直在尝试使用 java 代码从我的 Microsoft Exchange 服务器检索电子邮件。

这是我的代码

    Properties properties = new Properties();
    properties.put("mail.pop3.host", host);
    properties.put("mail.pop3.port", port);
    // SSL setting
    properties.setProperty("mail.pop3.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    properties.setProperty("mail.pop3.socketFactory.fallback", "false");
    properties.setProperty("mail.pop3.socketFactory.port",String.valueOf(port));

    properties.setProperty("mail.auth.debug","true");
    String pid = "";
    Boolean chkFlag = false;
    Session session = Session.getInstance(properties);
    try {
        properties.setProperty("mail.store.protocol", "pop3");
        session = Session.getDefaultInstance(properties, null);
        Store store = session.getStore("pop3");
        System.out.println("host,userName, password"+host +" " +userName + " "+password );
        store.connect(host,userName, password);
        Folder folderInbox = store.getFolder("Inbox");
        folderInbox.open(Folder.READ_WRITE);
        System.out.println("bffhb");
        String MailsaveDirectory = saveDirectory;
        Message[] arrayMessages = folderInbox.search(new FlagTerm(new Flags(
                Flags.Flag.SEEN), false));
        System.out.println("No. of Unread Messages : " + arrayMessages.length);
        for (int i = 0; i < arrayMessages.length; i++) {
            System.out.println("msgcnt");
            Message message = arrayMessages[i];
            Address[] fromAddress = message.getFrom();
            Address[] toAddress = message.getRecipients(Message.RecipientType.TO);
            String from = fromAddress[0].toString();
            String to = toAddress[0].toString();
            String subject = message.getSubject();
            String queueId = "";
            String sentDate = message.getSentDate().toString();
            String contentType = message.getContentType();
            String messageContent = "";
            String attachFiles = "";
            MailMht mh = new MailMht();
            saveDirectory = MailsaveDirectory + File.separator + "Message-" + (i + 1);
            System.out.println("saveDirectory "+saveDirectory);

                pid = subject.substring(subject.lastIndexOf(":") + 1);
                mh.parseMessages(message, folderInbox, saveDirectory);
                if (contentType.contains("multipart")) {

                }
                if (true) {

                    File dir = new File(saveDirectory);
                    System.out.println("dir to be created:" + saveDirectory);
                    if (dir.exists() == false) {
                        System.out.println("Creating Dir...");
                        dir.mkdirs();
                        System.out.println("Created Dir...");
                    }
                    if (contentType.contains("multipart")) {
                    }

            } else {
                chkFlag = false;
            }

        try {
            Folder folderI = null;
            if (chkFlag) {

                folderInbox.setFlags(arrayMessages, new Flags(Flags.Flag.DELETED), true);
                folderInbox.close(true);

                store.close();
                chkFlag = true;
            }
        } catch (Exception e) {
            chkFlag = false;
            e.printStackTrace();
            folderInbox.close(false);
            store.close();
        }
    } 

    } catch (MessagingException ex) {
        System.out.println("Could not connect to the message store");
        ex.printStackTrace();
        chkFlag = false;
    } 
    return chkFlag;
}

我已经完成了几乎所有操作,但遇到了身份验证异常

javax.mail.AuthenticationFailedException: [AUTH] Authentication failed.

但是我可以通过live.com网站登录。

有人有摆脱这个问题的建议吗?

最佳答案

是的:您在获取邮件 session 时错过了身份 validator :

Authenticator authenticator=new Authenticator()
{
    @Override
    protected PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication(userName, password);
    }
};
properties.setProperty("mail.pop3.auth", "true");
Session session=Session.getInstance(props, authenticator);

顺便说一句,您有两个 session 初始化:删除其中一个。

关于java - 使用 Java 从 Microsoft 邮件 Exchange 服务器读取带有附件的邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733173/

相关文章:

java - 为什么我无法使用插入查询耶拿数据集创建图形

php - 增加每秒 MySQL 查询次数

php - 为什么不将 phpinfo 与 php5.ini 一起使用?

google-chrome - 该网站的身份尚未经过 openssl 验证

windows - edb 数据库中的事务日志文件

java - 构建霍夫曼树

java - Jackson - 在 JsonSerializer 中使用 JsonView?

swift - 让应用程序和服务器保持完美运行?

c++ - 如何找出信息存储的可分辨名称以提供给 IExchangeManageStore::GetMailboxTable?

java - 根据音高、速度和速率应用声音效果