JDC Tech Tip "Sending Mail With the JavaMail API¿¡¼´Â JavaMail API¸¦ ÀÌ¿ëÇÑ SMTP¸¦ ÅëÇØ ¸ÞÀÏÀ» º¸³»´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ÀÌ ÆÁÀº POP / IMAP ¼¹ö¿¡¼ ¸ÞÀÏÀ» °¡Á®¿À´Â ¹æ¹ýÀ» º¸¿©ÁÙ °ÍÀÌ´Ù.
¸ÞÀÏÀ» °¡Á®¿À´Â °ÍÀº ¸ÞÀÏÀ» º¸³»´Â °Í°ú ºñ½ÁÇÏ´Ù. ¿¹¸¦ µé¸é, ¸ÞÀÏÀ» º¸³¾ ¶§´Â Session, Message, Address, Transport Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. ¸ÞÀÏÀ» °¡Á®¿Ã ¶§µµ °°Àº Session, Message Ŭ·¡½º¸¦ »ç¿ëÇÏÁö¸¸, Folder¿Í Store Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¸ÞÀÏÀ» °¡Á®¿À·Á¸é ¸ÞÀϼ¹ö¿¡ Á¢¼ÓÇÏ°í ¸Þ½ÃÁö´Â StoreÀÇ Folder¿¡ ÀúÀåÀÌ µÈ´Ù.
¸ÞÀÏÀ» °¡Á®¿À±â À§ÇÏ¿© óÀ½ ÇÒ ÀÏÀº ¸ÞÀϼ¹ö¿Í ¿¬°áÀ» ÇÏ´Â °ÍÀε¥, ¸ÞÀÏÀ» º¸³¾ ¶§¿Í °°Àº ¹æ¹ýÀÌ´Ù. ±×·¯³ª Á¢¼ÓÇÏ´Â ¸ÞÀϼ¹ö´Â ´Ù¸£´Ù. ¸ÞÀÏÀ» º¸³¾ ¶§´Â SMTP(Simple Mail Transfer Protocol)¸¦ Áö¿øÇÏ´Â ¼¹ö¿¡ ¿¬°áÇØ¾ß ÇÕ´Ï´Ù. SMTP´Â ¸ÞÀÏÀ» º¸³»±â À§ÇÑ ÇÁ·ÎÅäÄÝÀÔ´Ï´Ù. ¸ÞÀÏÀ» °¡Á®¿À±â À§Çؼ´Â POP3(Post Office Protocol, Version 3)³ª IMAP4(Internet Message Access Protocol, Version 4)¸¦ Áö¿øÇÏ´Â ¼¹ö¿¡ ¿¬°áÇØ¾ß ÇÑ´Ù. À̵é ÇÁ·ÎÅäÄÝÀº ¸ÞÀÏÀ» °¡Á®¿À±â À§ÇØ ¼³°èµÇ¾ú´Ù. POP3´Â ´Ü¼øÇÑ ÇÁ·ÎÅäÄÝÀÌ´Ù. ¸ÞÀÏÀ» °¡Á®¿Ã ¼ö¸¸ ÀÖ°í »õ·Î¿î ¸ÞÀÏÀ» ±¸º°ÇÒ ¼ö ÀÖ´Â ±â´ÉÀº ¾ø´Ù. ±×¿¡ ºñÇØ IMAPÀº »ó´çÈ÷ º¹ÀâÇÏ´Ù.
Session Ŭ·¡½ºÀÇ getDefaultInstance()³ª getInstance() ¸Þ¼Òµå¸¦ È£ÃâÇؼ ¸ÞÀÏ ¼¼¼ÇÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù. getDefaultInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é °øÀ¯ ¼¼¼Ç ÀνºÅϽº°¡ ¹ÝȯµÈ´Ù. Áï, ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§¸¶´Ù µ¿ÀÏÇÑ ¼¼¼ÇÀÌ ¹ÝȯµÈ´Ù. ¹Ý¸é¿¡ getInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é ±×¶§¸¶´Ù »õ·Î¿î ¼¼¼Ç ÀνºÅϽº°¡ ¹ÝȯµÈ´Ù. »õ·Î¿î ¼¼¼ÇÀº ´Ù¸¥ ¾²·¹µå°¡ µ¿½Ã¿¡ °øÀ¯¼¼¼Ç°ú ÀÛ¾÷Çϱ⸦ À§ÇÏÁö ¾ÊÀ» ¶§ »ç¿ëÇϸé À¯¿ëÇÏ´Ù.
¼¼¼ÇÀ» ¾òÀ» ¶§ Properties ÀνºÅϽº¸¦ ¸Þ¼Òµå Àμö·Î ³Ñ°Ü¾ß ÇÑ´Ù. ÀÌ°ÍÀº ¿¬°áÇÏ°íÀÚ ÇÏ´Â ¸ÞÀϼ¹öÀÇ ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Ù. ¿¬°áÇÏ°íÀÚ ÇÏ´Â ¸ÞÀϼ¹ö·Î "mail.pop3.host" (¶Ç´Â "mail.imap.host")¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.(¿¹, pop.example.com)
// Setup properties
Properties props = System.getProperties();
props.put("mail.pop3.host", host);
¸ÞÀÏÀ» °¡Á®¿Ã ¶§ ¿¬°áÀ» À§ÇÑ ÀÎÁõ°úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. JavaMailÀÇ Authenticator Ŭ·¡½º¸¦ È®ÀåÇؼ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹·Î PopupAuthenticator Ŭ·¡½º´Â »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇϱâ À§Çؼ SwingÀÇ JOptionPane¸¦ »ç¿ëÇÏ°í ÀÖ´Ù. ÀÌ ¿¹Á¦´Â »ç¿ëÀÚ°¡ ÄÞ¸¶·Î ±¸ºÐµÈ »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇÏ°Ô µÇ¾î ÀÖ´Ù. getPasswordAuthentication() ¸Þ¼Òµå´Â »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ¹ÝȯÇÏ°í ÀÖ´Ù.(Æнº¿öµå ÀÔ·ÂÀ» À§ÇØ JPasswordField¸¦ »ç¿ëÇØ º¸ÀÚ)
import javax.mail.*;
import javax.swing.*;
import java.util.*;
public class PopupAuthenticator
extends Authenticator {
public PasswordAuthentication
getPasswordAuthentication() {
String username, password;
String result = JOptionPane.showInputDialog(
"Enter 'username,password'");
StringTokenizer st =
new StringTokenizer(result, ",");
username = st.nextToken();
password = st.nextToken();
return new PasswordAuthentication(
username, password);
}
}
Properties¿Í Authenticator¸¦ »ý¼ºÇÑ ÀÌÈÄ ¼¼¼ÇÀ» ¾ò¾î ¿Ã ¼ö ÀÖ´Ù.
// Setup authentication, get session
Authenticator auth = new PopupAuthenticator();
Session session =
Session.getDefaultInstance(props, auth);
´ÙÀ½À¸·Î getStore() ¸Þ¼Òµå¸¦ È£ÃâÇؼ Store¿¡ ¿¬°áÇÒ ¼ö Àִµ¥, À̶§ "pop3"³ª "imap"°ú °°ÀÌ ÇÁ·ÎÅäÄÝ À̸§À» Àμö·Î ³Ñ°Ü¾ß ÇÑ´Ù. ´ÙÀ½Àº POP3 ¼¹ö¿¡ ¿¬°áÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.
// Get the store
Store store = session.getStore("pop3");
store.connect();
StoreÀÇ connect() ¸Þ¼Òµå´Â PopupAuthenticator¸¦ È£ÃâÇÏ°Ô µÈ´Ù. À§Çؼ ¾ð±ÞÇßµíÀÌ PopupAuthenticator´Â »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀԷ¹޴´Ù. ¸¸ÀÏ »ç¿ëÀÚÀ̸§°ú Æнº¿öµå°¡ ¸ÞÀÏ°èÁ¤°ú ÀÏÄ¡ÇÏ¸é ¸ÞÀϼ¹ö¿Í ¿¬°áÀÌ µÇ°í ¸ÞÀÏÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ¸ðµç ¸ÞÀÏÀº Folder ÀνºÅϽº¿¡ ÀúÀåÀÌ µÇ´Âµ¥ ¸ÞÀÏÀ» Àбâ À§Çؼ ¸ÕÀú Folder¿Í ¿¬°áÇØ¾ß ÇÑ´Ù. POP ¸ÞÀÏÀÏ °æ¿ì¿£ ¿ÀÁ÷ ÇÑ°³ÀÇ INBOX¶ó´Â Folder°¡ ÀÖ´Ù. ±×¸®°í, IMAP°æ¿ì¿¡´Â INBOX³ª »ç¿ëÀÚ°¡ ¸¸µç Folder°¡ Á¸ÀçÇÑ´Ù. ¸¸ÀÏ INBOX¿¡¼ ¸ÞÀÏÀ» ÀÐÀ¸·Á¸é StoreÀÇ getFolder() ¸Þ¼Òµå¸¦ È£ÃâÇؼ Folder¿Í ¿¬°áÇÏ¸é µÈ´Ù.
¡¡
// Get folder
Folder folder = store.getFolder("INBOX");
´ÙÀ½À¸·Î open() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ Folder¸¦ ¿¬´Ù. Folder¸¦ ¿ ¶§¿¡´Â Folder.READ_WRITE³ª Folder.READ_ONLY ¸ðµå·Î ¿ ¼ö ÀÖ´Ù. ¸ÞÀÏÀ» Àб⸸ ÇÒ ¶§´Â Folder.READ_ONLY·Î, »èÁ¦¸¦ ÇÏ°í ½ÍÀ¸¸é Folder.READ_WRITE ¿¸é µÈ´Ù.
¡¡
folder.open(Folder.READ_ONLY);
Folder¿¡ ¿¬°áµÇ¸é °³°³ÀÇ Message °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. getMessage() ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á °³°³ÀÇ Message¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº getMessage() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ ¸ðµç Message¿¡ °¡Á®¿À´Â ¿¹Á¦ÀÌ´Ù.
¡¡
// Get directory
Message message[] = folder.getMessages();
Folder Ŭ·¡½ºÀÇ getNewMessageCount() ¸Þ¼Òµå´Â FolderÀÇ »õ·Î¿î ¸Þ½ÃÁö ¼ö¸¦ ¹ÝȯÇÏ´Ù. ±×·¯³ª, POP ¼¹ö¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â ÀÌ°ÍÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. POP¿¡¼´Â »õ·Î¿î Message °³³äÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. Message¸¦ °¡Á®¿Ã ¶§ ¸î °¡Áö ¿É¼ÇÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î getFrom()Àº º¸³½»ç¶÷ÀÇ ¸ÞÀÏÁÖ¼Ò, getSubject()´Â ¸ÞÀÏÀ» Á¦¸ñÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.
¡¡
// Display from (only first) and subject of messages
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": "
+ message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
}
¸¸ÀÏ ¸Þ½ÃÁö ³»¿ëÀ» º¸·Á¸é getContent() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
System.out.println(message[i].getContent());
¶ÇÇÑ, writeTo() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ Çì´õ¸¦ Æ÷ÇÔÇÑ Message ³»¿ëÀ» ½ºÆ®¸²À¸·Î ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¸ÞÀÏÀ» ÀÐÀº ÈÄ¿¡ Folder¿Í Store´Â ¹Ýµå½Ã ´Ý¾Æ¾ßÇÑ´Ù. FolderÀÇ °æ¿ì¿¡´Â close()¸¦ È£ÃâÇÒ ¶§ Message¸¦ Áö¿ïÁö ¾È Áö¿ïÁö¸¦ Àμö·Ñ ³Ñ°Ü¾ß ÇÏ°í, StoreÀÇ close()´Â Àμö°¡ ÇÊ¿ä¾ø´Ù.
// Close connection
folder.close(false);
store.close();
´ÙÀ½Àº Fetch ÇÁ·Î±×·¥ ÄÚµå·Î À§¿¡¼ ¼³¸íÇÑ ¸ÞÀÏÀ» °¡Á®¿À´Â ¿¹Á¦ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°±â À§Çؼ´Â JavaMail API°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß Çϸç, ¶ÇÇÑ JavaBeansTM Activation Frameworkµµ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ´Ù¿î·Îµå Á¤º¸´Â ¾Æ·¡¿¡ ÀÖ´Ù. Fetch ÇÁ·Î±×·¥Àº INBOX¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¸Þ½ÃÁöÀÇ ÃÖÃÊ 200ÀÚÀÇ ¹®ÀÚ¸¦ Ãâ·ÂÇÕ´Ï´Ù. ¸¸ÀÏ ¸ÞÀÏ ¼¹ö°¡ POPÀ» Áö¿øÇÏÁö ¾Ê°í, IMAPÀ» Áö¿øÇϸé Äڵ忡¼ "pop"À» "imap"À¸·Î ¹Ù²Ù¸é µÈ´Ù. ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϱâ Àü¿¡ À§¿¡¼ ¼Ò°³ÇÑ PopupAuthenticator¸¦ ¸ÕÀú ÄÄÆÄÀÏÇÏÀÚ. Ä¿¸Çµå¶óÀο¡¼ ´ÙÀ½°ú °°ÀÌ Fetch ÇÁ·Î±×·¥À» ½ÇÇàÇÏÀÚ.
¡¡
java Fetch mailserver
¸ÞÀϼ¹öÀÇ À̸§Àº ´ç½ÅÀÇ ¸ÞÀϼ¹ö À̸§À¸·Î ¹Ù²ÙÀÚ. ½ÇÇà½ÃŲ ÈÄ »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù.
¡¡
import java.io.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class Fetch {
public static void main (String args[])
throws Exception {
String host = args[0];
// Get system properties
Properties props = System.getProperties();
props.put("mail.pop3.host", host);
// Setup authentication, get session
Authenticator auth = new PopupAuthenticator();
Session session =
Session.getDefaultInstance(props, auth);
// Get the store
Store store = session.getStore("pop3");
store.connect();
// Get folder
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
// Get directory
Message message[] = folder.getMessages();
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": "
+ message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
String content =
message[i].getContent().toString();
if (content.length() > 200) {
content = content.substring(0, 200);
}
System.out.print(content);
}
// Close connection
folder.close(false);
store.close();
System.exit(0);
}
}
ÃֽŹöÀüÀÇ JavaMail API¸¦ JavaMail API page¿¡¼ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. JavaMail API¸¦ »ç¿ëÇϱâ À§Çؼ´Â JavaBeans Activation FrameworkÀÌ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. JavaBeans Activation FrameworkÀº JavaBeans Activation Framework page¿¡¼ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ, À̵éÀº Java 2 Platform, Enterprise Edition 1.3 download¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù. JavaMail ¼Ò½ºÄÚµå´Â J2EE 1.3 Sun Community Source Licensing (SCSL) program¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â ÀÌÀü Äڵ忡¼ ¾à°£ º¯°æµÈ °ÍÀÌ´Ù. ¸¸ÀÏ Authenticator¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é Properties ÁöÁ¤µÇÁö ¾ÊÀº SessionÀ» ¾òÀ¸¸é µÈ´Ù. ±×¸®°í È£½ºÆ®À̸§, »ç¿ëÀÚÀ̸§, Æнº¿öµå¸¦ Àμö·Î Çؼ connect() ¸Þ¼Òµå¸¦ È£ÃâÇÏÀÚ. ´ÙÀ½Àº º¯°æµÈ ÄÚµåÀÇ ÀϺÎÀÌ´Ù.
// Setup empty properties
Properties props = new Properties();
// Get session
Session session = Session.getDefaultInstance(props, null);
// Get the store
Store store = session.getStore("pop3");
store.connect(host, username, password);
¸ÞÀÏÀ» °¡Á®¿À´Â °ÍÀº ¸ÞÀÏÀ» º¸³»´Â °Í°ú ºñ½ÁÇÏ´Ù. ¿¹¸¦ µé¸é, ¸ÞÀÏÀ» º¸³¾ ¶§´Â Session, Message, Address, Transport Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. ¸ÞÀÏÀ» °¡Á®¿Ã ¶§µµ °°Àº Session, Message Ŭ·¡½º¸¦ »ç¿ëÇÏÁö¸¸, Folder¿Í Store Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¸ÞÀÏÀ» °¡Á®¿À·Á¸é ¸ÞÀϼ¹ö¿¡ Á¢¼ÓÇÏ°í ¸Þ½ÃÁö´Â StoreÀÇ Folder¿¡ ÀúÀåÀÌ µÈ´Ù.
¸ÞÀÏÀ» °¡Á®¿À±â À§ÇÏ¿© óÀ½ ÇÒ ÀÏÀº ¸ÞÀϼ¹ö¿Í ¿¬°áÀ» ÇÏ´Â °ÍÀε¥, ¸ÞÀÏÀ» º¸³¾ ¶§¿Í °°Àº ¹æ¹ýÀÌ´Ù. ±×·¯³ª Á¢¼ÓÇÏ´Â ¸ÞÀϼ¹ö´Â ´Ù¸£´Ù. ¸ÞÀÏÀ» º¸³¾ ¶§´Â SMTP(Simple Mail Transfer Protocol)¸¦ Áö¿øÇÏ´Â ¼¹ö¿¡ ¿¬°áÇØ¾ß ÇÕ´Ï´Ù. SMTP´Â ¸ÞÀÏÀ» º¸³»±â À§ÇÑ ÇÁ·ÎÅäÄÝÀÔ´Ï´Ù. ¸ÞÀÏÀ» °¡Á®¿À±â À§Çؼ´Â POP3(Post Office Protocol, Version 3)³ª IMAP4(Internet Message Access Protocol, Version 4)¸¦ Áö¿øÇÏ´Â ¼¹ö¿¡ ¿¬°áÇØ¾ß ÇÑ´Ù. À̵é ÇÁ·ÎÅäÄÝÀº ¸ÞÀÏÀ» °¡Á®¿À±â À§ÇØ ¼³°èµÇ¾ú´Ù. POP3´Â ´Ü¼øÇÑ ÇÁ·ÎÅäÄÝÀÌ´Ù. ¸ÞÀÏÀ» °¡Á®¿Ã ¼ö¸¸ ÀÖ°í »õ·Î¿î ¸ÞÀÏÀ» ±¸º°ÇÒ ¼ö ÀÖ´Â ±â´ÉÀº ¾ø´Ù. ±×¿¡ ºñÇØ IMAPÀº »ó´çÈ÷ º¹ÀâÇÏ´Ù.
Session Ŭ·¡½ºÀÇ getDefaultInstance()³ª getInstance() ¸Þ¼Òµå¸¦ È£ÃâÇؼ ¸ÞÀÏ ¼¼¼ÇÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù. getDefaultInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é °øÀ¯ ¼¼¼Ç ÀνºÅϽº°¡ ¹ÝȯµÈ´Ù. Áï, ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§¸¶´Ù µ¿ÀÏÇÑ ¼¼¼ÇÀÌ ¹ÝȯµÈ´Ù. ¹Ý¸é¿¡ getInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é ±×¶§¸¶´Ù »õ·Î¿î ¼¼¼Ç ÀνºÅϽº°¡ ¹ÝȯµÈ´Ù. »õ·Î¿î ¼¼¼ÇÀº ´Ù¸¥ ¾²·¹µå°¡ µ¿½Ã¿¡ °øÀ¯¼¼¼Ç°ú ÀÛ¾÷Çϱ⸦ À§ÇÏÁö ¾ÊÀ» ¶§ »ç¿ëÇϸé À¯¿ëÇÏ´Ù.
¼¼¼ÇÀ» ¾òÀ» ¶§ Properties ÀνºÅϽº¸¦ ¸Þ¼Òµå Àμö·Î ³Ñ°Ü¾ß ÇÑ´Ù. ÀÌ°ÍÀº ¿¬°áÇÏ°íÀÚ ÇÏ´Â ¸ÞÀϼ¹öÀÇ ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Ù. ¿¬°áÇÏ°íÀÚ ÇÏ´Â ¸ÞÀϼ¹ö·Î "mail.pop3.host" (¶Ç´Â "mail.imap.host")¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.(¿¹, pop.example.com)
// Setup properties
Properties props = System.getProperties();
props.put("mail.pop3.host", host);
¸ÞÀÏÀ» °¡Á®¿Ã ¶§ ¿¬°áÀ» À§ÇÑ ÀÎÁõ°úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. JavaMailÀÇ Authenticator Ŭ·¡½º¸¦ È®ÀåÇؼ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹·Î PopupAuthenticator Ŭ·¡½º´Â »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇϱâ À§Çؼ SwingÀÇ JOptionPane¸¦ »ç¿ëÇÏ°í ÀÖ´Ù. ÀÌ ¿¹Á¦´Â »ç¿ëÀÚ°¡ ÄÞ¸¶·Î ±¸ºÐµÈ »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇÏ°Ô µÇ¾î ÀÖ´Ù. getPasswordAuthentication() ¸Þ¼Òµå´Â »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ¹ÝȯÇÏ°í ÀÖ´Ù.(Æнº¿öµå ÀÔ·ÂÀ» À§ÇØ JPasswordField¸¦ »ç¿ëÇØ º¸ÀÚ)
import javax.mail.*;
import javax.swing.*;
import java.util.*;
public class PopupAuthenticator
extends Authenticator {
public PasswordAuthentication
getPasswordAuthentication() {
String username, password;
String result = JOptionPane.showInputDialog(
"Enter 'username,password'");
StringTokenizer st =
new StringTokenizer(result, ",");
username = st.nextToken();
password = st.nextToken();
return new PasswordAuthentication(
username, password);
}
}
Properties¿Í Authenticator¸¦ »ý¼ºÇÑ ÀÌÈÄ ¼¼¼ÇÀ» ¾ò¾î ¿Ã ¼ö ÀÖ´Ù.
// Setup authentication, get session
Authenticator auth = new PopupAuthenticator();
Session session =
Session.getDefaultInstance(props, auth);
´ÙÀ½À¸·Î getStore() ¸Þ¼Òµå¸¦ È£ÃâÇؼ Store¿¡ ¿¬°áÇÒ ¼ö Àִµ¥, À̶§ "pop3"³ª "imap"°ú °°ÀÌ ÇÁ·ÎÅäÄÝ À̸§À» Àμö·Î ³Ñ°Ü¾ß ÇÑ´Ù. ´ÙÀ½Àº POP3 ¼¹ö¿¡ ¿¬°áÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.
// Get the store
Store store = session.getStore("pop3");
store.connect();
StoreÀÇ connect() ¸Þ¼Òµå´Â PopupAuthenticator¸¦ È£ÃâÇÏ°Ô µÈ´Ù. À§Çؼ ¾ð±ÞÇßµíÀÌ PopupAuthenticator´Â »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀԷ¹޴´Ù. ¸¸ÀÏ »ç¿ëÀÚÀ̸§°ú Æнº¿öµå°¡ ¸ÞÀÏ°èÁ¤°ú ÀÏÄ¡ÇÏ¸é ¸ÞÀϼ¹ö¿Í ¿¬°áÀÌ µÇ°í ¸ÞÀÏÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ¸ðµç ¸ÞÀÏÀº Folder ÀνºÅϽº¿¡ ÀúÀåÀÌ µÇ´Âµ¥ ¸ÞÀÏÀ» Àбâ À§Çؼ ¸ÕÀú Folder¿Í ¿¬°áÇØ¾ß ÇÑ´Ù. POP ¸ÞÀÏÀÏ °æ¿ì¿£ ¿ÀÁ÷ ÇÑ°³ÀÇ INBOX¶ó´Â Folder°¡ ÀÖ´Ù. ±×¸®°í, IMAP°æ¿ì¿¡´Â INBOX³ª »ç¿ëÀÚ°¡ ¸¸µç Folder°¡ Á¸ÀçÇÑ´Ù. ¸¸ÀÏ INBOX¿¡¼ ¸ÞÀÏÀ» ÀÐÀ¸·Á¸é StoreÀÇ getFolder() ¸Þ¼Òµå¸¦ È£ÃâÇؼ Folder¿Í ¿¬°áÇÏ¸é µÈ´Ù.
¡¡
// Get folder
Folder folder = store.getFolder("INBOX");
´ÙÀ½À¸·Î open() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ Folder¸¦ ¿¬´Ù. Folder¸¦ ¿ ¶§¿¡´Â Folder.READ_WRITE³ª Folder.READ_ONLY ¸ðµå·Î ¿ ¼ö ÀÖ´Ù. ¸ÞÀÏÀ» Àб⸸ ÇÒ ¶§´Â Folder.READ_ONLY·Î, »èÁ¦¸¦ ÇÏ°í ½ÍÀ¸¸é Folder.READ_WRITE ¿¸é µÈ´Ù.
¡¡
folder.open(Folder.READ_ONLY);
Folder¿¡ ¿¬°áµÇ¸é °³°³ÀÇ Message °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. getMessage() ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á °³°³ÀÇ Message¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº getMessage() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ ¸ðµç Message¿¡ °¡Á®¿À´Â ¿¹Á¦ÀÌ´Ù.
¡¡
// Get directory
Message message[] = folder.getMessages();
Folder Ŭ·¡½ºÀÇ getNewMessageCount() ¸Þ¼Òµå´Â FolderÀÇ »õ·Î¿î ¸Þ½ÃÁö ¼ö¸¦ ¹ÝȯÇÏ´Ù. ±×·¯³ª, POP ¼¹ö¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â ÀÌ°ÍÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. POP¿¡¼´Â »õ·Î¿î Message °³³äÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. Message¸¦ °¡Á®¿Ã ¶§ ¸î °¡Áö ¿É¼ÇÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î getFrom()Àº º¸³½»ç¶÷ÀÇ ¸ÞÀÏÁÖ¼Ò, getSubject()´Â ¸ÞÀÏÀ» Á¦¸ñÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.
¡¡
// Display from (only first) and subject of messages
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": "
+ message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
}
¸¸ÀÏ ¸Þ½ÃÁö ³»¿ëÀ» º¸·Á¸é getContent() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
System.out.println(message[i].getContent());
¶ÇÇÑ, writeTo() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ Çì´õ¸¦ Æ÷ÇÔÇÑ Message ³»¿ëÀ» ½ºÆ®¸²À¸·Î ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¸ÞÀÏÀ» ÀÐÀº ÈÄ¿¡ Folder¿Í Store´Â ¹Ýµå½Ã ´Ý¾Æ¾ßÇÑ´Ù. FolderÀÇ °æ¿ì¿¡´Â close()¸¦ È£ÃâÇÒ ¶§ Message¸¦ Áö¿ïÁö ¾È Áö¿ïÁö¸¦ Àμö·Ñ ³Ñ°Ü¾ß ÇÏ°í, StoreÀÇ close()´Â Àμö°¡ ÇÊ¿ä¾ø´Ù.
// Close connection
folder.close(false);
store.close();
´ÙÀ½Àº Fetch ÇÁ·Î±×·¥ ÄÚµå·Î À§¿¡¼ ¼³¸íÇÑ ¸ÞÀÏÀ» °¡Á®¿À´Â ¿¹Á¦ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°±â À§Çؼ´Â JavaMail API°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß Çϸç, ¶ÇÇÑ JavaBeansTM Activation Frameworkµµ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ´Ù¿î·Îµå Á¤º¸´Â ¾Æ·¡¿¡ ÀÖ´Ù. Fetch ÇÁ·Î±×·¥Àº INBOX¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¸Þ½ÃÁöÀÇ ÃÖÃÊ 200ÀÚÀÇ ¹®ÀÚ¸¦ Ãâ·ÂÇÕ´Ï´Ù. ¸¸ÀÏ ¸ÞÀÏ ¼¹ö°¡ POPÀ» Áö¿øÇÏÁö ¾Ê°í, IMAPÀ» Áö¿øÇϸé Äڵ忡¼ "pop"À» "imap"À¸·Î ¹Ù²Ù¸é µÈ´Ù. ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϱâ Àü¿¡ À§¿¡¼ ¼Ò°³ÇÑ PopupAuthenticator¸¦ ¸ÕÀú ÄÄÆÄÀÏÇÏÀÚ. Ä¿¸Çµå¶óÀο¡¼ ´ÙÀ½°ú °°ÀÌ Fetch ÇÁ·Î±×·¥À» ½ÇÇàÇÏÀÚ.
¡¡
java Fetch mailserver
¸ÞÀϼ¹öÀÇ À̸§Àº ´ç½ÅÀÇ ¸ÞÀϼ¹ö À̸§À¸·Î ¹Ù²ÙÀÚ. ½ÇÇà½ÃŲ ÈÄ »ç¿ëÀÚÀ̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù.
¡¡
import java.io.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class Fetch {
public static void main (String args[])
throws Exception {
String host = args[0];
// Get system properties
Properties props = System.getProperties();
props.put("mail.pop3.host", host);
// Setup authentication, get session
Authenticator auth = new PopupAuthenticator();
Session session =
Session.getDefaultInstance(props, auth);
// Get the store
Store store = session.getStore("pop3");
store.connect();
// Get folder
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
// Get directory
Message message[] = folder.getMessages();
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": "
+ message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
String content =
message[i].getContent().toString();
if (content.length() > 200) {
content = content.substring(0, 200);
}
System.out.print(content);
}
// Close connection
folder.close(false);
store.close();
System.exit(0);
}
}
ÃֽŹöÀüÀÇ JavaMail API¸¦ JavaMail API page¿¡¼ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. JavaMail API¸¦ »ç¿ëÇϱâ À§Çؼ´Â JavaBeans Activation FrameworkÀÌ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. JavaBeans Activation FrameworkÀº JavaBeans Activation Framework page¿¡¼ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ, À̵éÀº Java 2 Platform, Enterprise Edition 1.3 download¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù. JavaMail ¼Ò½ºÄÚµå´Â J2EE 1.3 Sun Community Source Licensing (SCSL) program¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â ÀÌÀü Äڵ忡¼ ¾à°£ º¯°æµÈ °ÍÀÌ´Ù. ¸¸ÀÏ Authenticator¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é Properties ÁöÁ¤µÇÁö ¾ÊÀº SessionÀ» ¾òÀ¸¸é µÈ´Ù. ±×¸®°í È£½ºÆ®À̸§, »ç¿ëÀÚÀ̸§, Æнº¿öµå¸¦ Àμö·Î Çؼ connect() ¸Þ¼Òµå¸¦ È£ÃâÇÏÀÚ. ´ÙÀ½Àº º¯°æµÈ ÄÚµåÀÇ ÀϺÎÀÌ´Ù.
// Setup empty properties
Properties props = new Properties();
// Get session
Session session = Session.getDefaultInstance(props, null);
// Get the store
Store store = session.getStore("pop3");
store.connect(host, username, password);