developer tip

IMAP을 사용하여 Gmail에서 Java 애플리케이션으로 메일 가져 오기

optionbox 2020. 10. 22. 07:56
반응형

IMAP을 사용하여 Gmail에서 Java 애플리케이션으로 메일 가져 오기


JavaMail 및 IMAP을 사용하여 Java 응용 프로그램에서 GMail의 메시지에 액세스하고 싶습니다. SocketTimeoutException이 발생하는 이유는 무엇 입니까?

내 코드는 다음과 같습니다.

Properties props = System.getProperties();
props.setProperty("mail.imap.host", "imap.gmail.com");
props.setProperty("mail.imap.port", "993");
props.setProperty("mail.imap.connectiontimeout", "5000");
props.setProperty("mail.imap.timeout", "5000");

try {
    Session session = Session.getDefaultInstance(props, new MyAuthenticator());
    URLName urlName = new URLName("imap://MYUSERNAME@gmail.com:MYPASSWORD@imap.gmail.com");
    Store store = session.getStore(urlName);
    if (!store.isConnected()) {
        store.connect();
    }
} catch (NoSuchProviderException e) {
    e.printStackTrace();
    System.exit(1);
} catch (MessagingException e) {
    e.printStackTrace();
    System.exit(2);
}

타임 아웃에 "영원히"걸리지 않도록 타임 아웃 값을 설정했습니다. 또한 MyAuthenticator 에는 URL과 중복되는 사용자 이름과 암호도 있습니다. 프로토콜을 지정하는 다른 방법이 있습니까? (IMAP 용 JavaDoc에서는 보지 못했습니다.)


imaps를 사용하는 것은 좋은 제안이었습니다. 제공된 답변 중 어느 것도 저에게 효과가 없었기 때문에 더 많이 검색하여 효과가있는 것을 찾았습니다. 내 코드가 지금 어떻게 보이는지 다음과 같습니다.

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>@gmail.com", "<password>");
  ...
} catch (NoSuchProviderException e) {
  e.printStackTrace();
  System.exit(1);
} catch (MessagingException e) {
  e.printStackTrace();
  System.exit(2);
}

중복 인증기를 사진에서 제거하기 때문에 좋습니다. SSLNOTES.txt가 내 머리를 돌리기 때문에 이것이 효과가 있다는 것을 기쁘게 생각합니다.


imap에 대해 다음 속성을 사용해야합니다.

props.setProperty("mail.imaps.host", "imap.gmail.com");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.connectiontimeout", "5000");
props.setProperty("mail.imaps.timeout", "5000");

사용중인 프로토콜이 imap (IMAP + SSL)이므로 "imap"이 아니라 "imaps"입니다.


JavaMail에서 imapsSSL을 통한 IMAP를 사용하기위한 URL 체계로 사용할 수 있습니다 . (자세한 내용 SSLNOTES.txt은 JavaMail 배포를 참조하십시오.) 예 : imaps://username%40gmail.com@imap.gmail.com/INBOX.

마찬가지로 smtpsGmail을 통해 이메일을 보내는 데 사용 합니다. 예 : smtps://username%40gmail.com@smtp.gmail.com/. 다시 한 번 SSLNOTES.txt더 자세한 내용을 읽으십시오 . 도움이 되었기를 바랍니다.


SSL 만 사용하여 Gmail에 연결해야합니다. 다음 속성을 설정하면 강제로 적용됩니다.

props.setProperty ( "mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty ( "mail.imap.socketFactory.fallback", "false");

If you'd like more sample code on using JavaMail with Gmail (e.g. converting Gmail labels to IMAP folder names, or using IMAP IDLE), do check out my program GmailAssistant on SourceForge.


Here is what worked for my team and I, given a classic account nickname@gmail.com and a business account employee@business.com :

            final Properties properties = new Properties();
            properties.put("mail.imap.ssl.enable", "true");

            imapSession = Session.getInstance(properties, null);
            imapSession.setDebug(false);
            imapStore = imapSession.getStore("imap");

            imapStore.connect("imap.gmail.com", USERNAME, "password");

with USERNAME = "nickname" in the classic case, and USERNAME = "employee@business.com" in the business account case.

In the classic case, and if you use an old JavaMail dependency, don't forget to lower the account security here : https://www.google.com/settings/security/lesssecureapps

In both cases check in GMail Settings => Forwarding POP / IMAP if IMAP is enabled for the account.

Hope it helps!

To go further :


Check http://g4j.sourceforge.net/. There is a minimal gmail client built using this API.


I used following properties to get the store and It works well.

"mail.imaps.host" : "imap.gmail.com"
"mail.store.protocol" : "imaps"
"mail.imaps.port" : "993"


You need to have JSSE installed to use SSL with Java


URLName server = new URLName("imaps://<gmail-user-name>:<gmail-pass>@imap.gmail.com/INBOX");

참고URL : https://stackoverflow.com/questions/61176/getting-mail-from-gmail-into-java-application-using-imap

반응형