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에서 imaps
SSL을 통한 IMAP를 사용하기위한 URL 체계로 사용할 수 있습니다 . (자세한 내용 SSLNOTES.txt
은 JavaMail 배포를 참조하십시오.) 예 : imaps://username%40gmail.com@imap.gmail.com/INBOX
.
마찬가지로 smtps
Gmail을 통해 이메일을 보내는 데 사용 합니다. 예 : 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 :
- http://www.oracle.com/technetwork/java/javamail/faq/index.html#gmail
- https://support.google.com/mail/accounts/answer/78754
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
'developer tip' 카테고리의 다른 글
새로운 AWS Certificate Manager 서비스를 사용하여 SSL 인증서를 AWS EC2에 추가하는 방법 (0) | 2020.10.22 |
---|---|
C #에서 iCal 파일 만들기 (0) | 2020.10.22 |
페이지가 완전히로드 될 때까지 브라우저가 페이지를 표시 할 때까지 기다리도록하려면 어떻게해야합니까? (0) | 2020.10.22 |
div 요소의 크기 조정 (0) | 2020.10.22 |
Enumeration이 java.utils의 List가 아닌 ArrayList로 변환되는 이유는 무엇입니까? (0) | 2020.10.22 |