当前位置: 首页 > 知识库问答 >
问题:

无法使用IMAP连接到Gmail

闾丘德业
2023-03-14

我有这个代码可以通过IMAP连接到Gmail

public static Session getSessionGmail() throws GeneralSecurityException {
    final Properties props = new Properties();
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    props.setProperty("mail.imap.host", "imap.gmail.com");
    props.setProperty("mail.imap.user", gmailUsername);
    props.setProperty("mail.imap.password", password);
    props.setProperty("mail.imap.port", "993");
    props.setProperty("mail.imap.auth", "true");
    props.setProperty("mail.imap.starttls.enable", "true");
    props.put("mail.imap.starttls.enable", "true");
    props.put("mail.imap.ssl.socketFactory", sf);

    Authenticator auth = new Authenticator() {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(gmailUsername, password);
        }
    };
    return Session.getDefaultInstance(props, auth);
}
public static Folder openFolder(Session session, String folder) throws MessagingException {
    Store store = session.getStore("imaps");
    store.connect(gmailUsername, password);
    Folder f = store.getFolder(folder);
    f.open(Folder.READ_ONLY);
    return f;
}

我总是会遇到这个例外,指向商店。connect()

javax.mail.AuthenticationFailedException: failed to connect
at javax.mail.Service.connect(Service.java:332)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:196)

我已经检查了谷歌的所有信息,如果我是对的,IMAP的端口是993。用户名和密码绝对正确。我想我错过了一些东西,但我无法弄清楚。

任何帮助都将不胜感激!

编辑

添加邮件后。debug,我得到了这些日志,但我仍然停留在商店里。connect()

DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle]
DEBUG IMAPS: mail.imap.fetchsize: 16384
DEBUG IMAPS: mail.imap.ignorebodystructuresize: false
DEBUG IMAPS: mail.imap.statuscachetimeout: 1000
DEBUG IMAPS: mail.imap.appendbuffersize: -1
DEBUG IMAPS: mail.imap.minidletime: 10
...
DEBUG IMAPS: protocolConnect login, host=imap.gmail.com, user=louis.t@gmail.com, password=<non-null>
DEBUG IMAPS: AUTHENTICATE PLAIN command trace suppressed
DEBUG IMAPS: AUTHENTICATE PLAIN command result: A1 NO [ALERT] Please log in via your web browser:

它已登录,但仍卡在connect上。。

共有1个答案

左丘成天
2023-03-14

试试这种方式(注意字符串中的imaps)

    sf.setTrustAllHosts(true);
    props.setProperty("mail.imaps.host", "imap.gmail.com");
    props.setProperty("mail.imaps.user", gmailUsername);
    props.setProperty("mail.imaps.password", password);
    props.setProperty("mail.imaps.port", "993");
    props.setProperty("mail.imaps.auth", "true");
    props.setProperty("mail.debug", "true");

我的“从不安全的决定中连接”遇到了错误,但在gmail设置中有一种已知的解决方法。

 类似资料:
  • 参考https://msdn.microsoft.com/en-us/office/office365/api/use-outlook-rest-api。我仍然无法理解广告、Outlook和windows Live。 我从https://login.microsoftonline.com/common/oauth2/v2.0/authorize https://login.microsoftonl

  • 我使用的是David Walsh的脚本,它通过IMAP连接到Gmail,并在屏幕上输出电子邮件数据。 我已经运行了两个测试案例: 使用 IMAP 从我自己的域读取电子邮件。 使用 IMAP 从 gmail 读取电子邮件。 读120封邮件的时间差别很大。对于Gmail,整个脚本需要大约5秒,其中1.2秒连接,3.8秒阅读邮件,0.1629秒连接,0.0238秒阅读邮件。 这些价值观与我的预期大相径庭

  • 我使用的是Oracle 11g R2数据库。我使用Oracle SQL Developer。如果我创建了一个新连接并检查了基本连接类型并填写了我可以连接的字段。如果我选择TNS并在下拉菜单中选择我想要的,它会显示失败E/S异常:网络适配器无法建立连接。 这是tnsnames.ora。我用它连接到2个数据库,dblilly和astrea。我可以正确连接到astrea。侦听器已打开,实例已准备就绪。你

  • 当我尝试在数据库中插入数据时,会出现以下错误: 致命错误:未捕获PDOException:在C:\xampp\htdocs\social media\classes\DB中找不到驱动程序。php:5堆栈跟踪:#0 C:\xampp\htdocs\socialmedia\classes\DB。php(5):PDO-