用于访问gmail收件箱消息的javamail api

用于访问gmail收件箱消息的javamail api,gmail,jakarta-mail,Gmail,Jakarta Mail,我一直在尝试使用javamail api来读取gmail收件箱中的消息。我在网上找到了以下代码。我正试图在Eclipse上运行此程序,但由于出现“无效凭据异常”而失败。我在web应用程序的lib目录中有mail.jar、activation.jar、imap.jar和其他jar文件 你知道我为什么会收到这个例外吗?谢谢 javax.mail.AuthenticationFailedException: Invalid credentials n67if632335wep.219 at com.s

我一直在尝试使用javamail api来读取gmail收件箱中的消息。我在网上找到了以下代码。我正试图在Eclipse上运行此程序,但由于出现“无效凭据异常”而失败。我在web应用程序的lib目录中有mail.jar、activation.jar、imap.jar和其他jar文件

你知道我为什么会收到这个例外吗?谢谢

javax.mail.AuthenticationFailedException: Invalid credentials n67if632335wep.219
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:665)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at org.mb.mail.MailReader.main(MailReader.java:23)


package org.mb.mail;

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.*;

public class MailReader {

public static void main(String args[]) {
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "<username>", "password");
System.out.println(store);

Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for(Message message:messages) {
System.out.println(message);

扔掉这些代码并使用,你会发现许多其他有用的提示,包括调试提示。

如果你看到这个异常,你就在正确的路径中,只需更改邮件id或创建一个新的gmail id,这样安全性就会降低。(例如,主要gmail帐户在智能手机中配置较多,其高度安全性由google with Oauth2.0提供,因此gmail帐户连接将被google阻止,但当您尝试使用替代gmail id或未在移动设备中配置的gmail id时,可以轻松连接)
在此之前,这个问题让我头破血流,最终得到了解决。谢谢

您似乎正在将“密码”作为密码传递,并且您的用户名可能无效。这可能解释了无效凭据例外情况。您是否确实拥有所连接系统的有效用户名?
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (MessagingException e) {
            e.printStackTrace();
            System.exit(2);
        }

    }

}