¼Ò¼³°°ÀºJSP2ºÎ  7Àå Custom Tag & JavaMail  16 ¸ÞÀÏ ¼ö½ÅÇϱ⠠

 

7.16 ¸ÞÀÏ ¼ö½Å Çϱâ

 

¸ÞÀÏÀÇ ¼ö½Å, Á¤È®È÷ ¸»ÇÏÀÚ¸é, À¥»óÀÇ ¸ÞÀϼ­¹ö·ÎºÎÅÍ ¸ÞÀÏÀ» Àоî¿À´Â µ¥¿¡´Â Store Ŭ·¡½º¿Í Folder Ŭ·¡½º°¡ °ü¿©ÇÕ´Ï´Ù. ÀÌ µÎ °¡Áö Ŭ·¡½º´Â °¢°¢ ¸ÞÀÏ º¸°üÀå¼Ò¿Í ±× Àå¼Ò ¾ÈÀÇ Æú´õ¸¦ ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. ¸ÞÀÏÀü´ÞÀÇ ±¸Á¶¸¦ ±× Ŭ·¡½ºµé°ú ¿¬°ü½ÃÄÑ ³ªÅ¸³»¸é ¾Æ·¡¿Í °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.

 

 

±×¸² 7-6 JavaMail Àü´Þ ¸ÞÄ¿´ÏÁò

 

±×¸²À» º¸½Ã¸é, À§¿¡¼­ ¸ÞÀÏÀ» ¼Û½ÅÇÒ ¶§ ´Ù·ç¾ú´ø Message¿Í Transport Ŭ·¡½º ±×¸®°í ¾ÕÀ¸·Î ¸ÞÀÏ ¼ö½Å°ú ÇÔ²² »ìÆìº¼ Store¿Í Folder Ŭ·¡½º°¡ À¯±âÀûÀ¸·Î ¿¬°üµÇ¾î ¸ÞÀÏ¿¡ °ü¿©Çϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×·³ ¸ÞÀϼö½Å¿¡ °ü°èµÇ´Â ÁÖ¿ä Ŭ·¡½ºµé¿¡ ´ëÇØ »ìÆìº¸°Ú½À´Ï´Ù.

 

javax.mail.Store Ŭ·¡½º

 

          Store Ŭ·¡½º´Â ¸Þ½ÃÁö¸¦ ÀúÀåÇÏ°í °¡Á®¿À±â À§ÇØ Message Store·ÎÀÇ Á¢±Ù°ú ProtocolÀ» ¸ðµâÈ­Çϴ Ŭ·¡½ºÀÔ´Ï´Ù. Áï ¿©·¯ºÐÀÌ °¡Áø ¸ÞÀÏ ¼­¹ö¿¡ Á¢±ÙÇÏ¿© ¸Þ½ÃÁö¿¡ Á¢±ÙÇϴ Ŭ·¡½º¶ó°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù.

 

n        public abstract class Store extends Service

 

javax.mail.Folder Ŭ·¡½º

 

FolderŬ·¡½º´Â ¸ÞÀϸ޽ÃÁö¸¦ Æ÷ÇÔÇÏ´Â Æú´õ¸¦ ³ªÅ¸³»´Â Ŭ·¡½º·Î »ç¿ëÀÚÀÇ ÁÖ Æú´õ´Â ¹ÞÀº ÆíÁöÇÔ Áï Inbox°¡ µË´Ï´Ù.

 

n        public abstract class Folder extends java.lang.Object

 

´ÙÀ½Àº ÀÎÅÍ³Ý ¸ÞÀÏ Provider¸¦ ÅëÇØ¼­ ¸ÞÀÏ InboxÀÇ ³»¿ëÀ» È®ÀÎÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù. ÇѰ¡Áö ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº ÷ºÎ ÆÄÀÏ µî Mulitpart·Î ±¸ÇöÇÑ ¸ÞÀÏÀ» ÀÐÀ¸·Á¸é, ±×¿¡ µû¶ó MultiPart ÇüÀ¸·Î ´Ù¿îij½ºÆÃ ÇÏ¿© µ¥ÀÌÅ͸¦ »ç¿ëÇØ¾ß µÈ´Ù´Â °ÍÀÔ´Ï´Ù.

 

readmail.html

¸ÞÀϼ­¹ö·ÎÀÇ ·Î±×ÀÎÀ» À§ÇÑ Æû

<html>
<body>
<h2>¸ÞÀÏÈ®ÀÎ</h2>
<pre>
<form action="/MySample/servlet/mail.ReadMail" method="POST">
POP3 Server <input type="text" name="host" value="pop.mail.yahoo.com">
User ID     <input type="text" name="user">
Password    <input type="password" name="password">
<input type="submit" value="·Î±×ÀÎ">
</form>
</pre>
</body>
</html>

ReadMail.java

¸ÞÀϼ­¹öÀÇ Inbox·ÎºÎÅÍ ¸ÞÀÏÀ» Àоî¿À´Â ¿¹Á¦

package mail;

import java.io.*;
import javax.mail.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
import org.jabook.util.*; 
import java.util.*;
import org.jabook.util.*; 
 
public class ReadMail extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException {

    String host = request.getParameter("host");
    String user = request.getParameter("user");
    String password = request.getParameter("password");

    response.setContentType("text/html;charset=KSC5601");
    PrintWriter out = response.getWriter();
    out.print("<h3><font color =blue>Inbox</font></h3><hr>");

    try{
      Properties props = new Properties();
      Session session = Session.getDefaultInstance(props, null);
      Store store = session.getStore("pop3");
      store.connect(host, user, password);

      Folder folder = store.getFolder("INBOX");
      folder.open(Folder.READ_ONLY);

      Message message[] = folder.getMessages();
      for (int i=0, n=message.length; i<n; i++) {
        out.print(HangulEncoder.toKSC5601("from: " + message[i].getFrom()[0
           + " ,  subject: " + message[i].getSubject())+"<br><br>");

        if(message[i].isMimeType("multipart/*")){
          Multipart multipart = (Multipart)message[i].getContent();

          for(int j = 0; j <multipart.getCount(); j++){
            Part p = multipart.getBodyPart(j);
            if(p.isMimeType("text/plain") || p.isMimeType("text/html")){
              out.print(p.getContent());
            }else{
              String filename =  p.getFileName();
              if(filename != null){
                InputStream in = p.getInputStream();
                FileOutputStream fout = new FileOutputStream(new File(filename));
                int c = in.read();
                while(c!=-1){
                  fout.write(c);
                  c=in.read();
                }
                out.print(" file :<a href = D:/jakarta/bin/"+ filename + ">"+filename+"</a>");
                fout.close();
                in.close();
              }
            }          
          }
          out.print("<hr>");
        }else{
          out.print(message[i].getContent() + "<hr>");
        }
      }
      folder.close(false);
      store.close();
    }catch(Exception e){
      out.print(e);
    }
  }
}

C:\jakarta\webapps\MySample\WEB-INF\classes\mail>javac ReadMail.java

 

 

¼Ò½º¸¦ ºÐ¼®ÇØ º¸°Ú½À´Ï´Ù. ¸ÕÀú Property¸¦ ±âÃÊ·Î SessionÀ» »ý¼ºÇÕ´Ï´Ù.

 

n        Session session = Session.getDefaultInstance(props, null);

 

E-Mall protocolÀ» À§ÇÑ Store¸¦ ¾ò½À´Ï´Ù. POP3, ¶Ç´Â IMAPÀÌ °¡´ÉÇÕ´Ï´Ù.

 

n        Store store = session.getStore("pop3");

 

Email Host·Î ¿¬°áÇÕ´Ï´Ù.

 

n        store.connect(host, username, password);

 

Àб⠿øÇÏ´Â Folder¸¦ °¡Á®¿Í Folder¸¦ ReadOnly ¼Ó¼ºÀ¸·Î ¿±´Ï´Ù.

 

n        Folder folder = store.getFolder("INBOX");

n        folder.open(Folder.READ_ONLY);

 

Æú´õÀÇ ¸Þ¼¼Áö ³»¿ëÀ» ¸ðµÎ ¹è¿­·Î ¹Þ½À´Ï´Ù.

 

n        Message message[] = folder.getMessages();

 

for¹®À» µ¹¸é¼­ ¸Þ½ÃÁöÀÇ º¸³½ »ç¶÷°ú, Á¦¸ñÀ» Ãâ·ÂÇÕ´Ï´Ù.

 

n        for (int i=0, n=message.length; i<n; i++) {

n                                                             out.print(HangulEncoder.toKSC5601("from: " + message[i].getFrom()[0]

n                                                                           + " ,  subject: " + message[i].getSubject())+"<br><br>");

 

¸Þ½ÃÁö ºÎºÐÀÌ multipart·Î ÀÌ·ç¾îÁ³´ÂÁö °Ë»çÇÏ¿© ±×·¸´Ù¸é MultiPartÇüÀ¸·Î ´Ù¿îij½ºÆÃ ÇÕ´Ï´Ù.

 

n        if(message[i].isMimeType("multipart/*")){

n                                                                           Multipart multipart = (Multipart)message[i].getContent();

 

multipartÀÇ MIMEŸÀÔÀ» °Ë»çÇÏ¿© ÅØ½ºÆ®°Å³ª HTMLÀÌ¸é ±× ³»¿ëÀ» ±×´ë·Î »Ñ·ÁÁÝ´Ï´Ù.

 

n        if(p.isMimeType("text/plain") || p.isMimeType("text/html")){

n                                   out.print(p.getContent());

n        }

 

multipartÀÇ MIMEŸÀÔÀÌ text³ª HTMLÀÌ ¾Æ´Ò °æ¿ì Áï, ÆÄÀÏÀÏ °æ¿ì ´ÙÀ½°ú °°ÀÌ ÆÄÆ®·ÎºÎÅÍ InputStreamÀ» ¾ò¾î ´Ù½Ã FileOutputStreamÀ¸·Î ÆÄÀÏÀ» ÀúÀåÇØ ³õ¾Ò½À´Ï´Ù. ±×¸®°í ±× ÆÄÀÏÀÇ ´Ù¿î·Îµå°¡ °¡´ÉÇϵµ·Ï ¸µÅ©¸¦ °É¾î ÁÖ¾ú½À´Ï´Ù.

 

n        String filename =  p.getFileName();

n                     if(filename != null){

n                                   InputStream in = p.getInputStream();

n                                   FileOutputStream fout = new FileOutputStream(new File(filename));

n                                   int c = in.read();

n                                   while(c!=-1){

n                                                fout.write(c);

n                                                c=in.read();

n                                   }

n                                   out.print(" file :<a href = D:/jakarta/bin/"+ filename + ">"+filename+"</a>");

n                     fout.close();

n                     in.close();

n        }

 

½ÇÁ¦ÀÇ À̸ÞÀÏ ¼ö½Å ÇÁ·Î±×·¥À» ¸¸µç´Ù¸é À§¿Í °°ÀÌ ÆÄÀÏÀ» ´Ù¿î·Îµå ÇÏ´Â ¹æ¹ýÀº Á¤¼®ÀÌ ¾Æ´ÒÁöµµ ¸ð¸£Áö¸¸, ÆÄÀÏÀÌ ´Ù¿î·ÎµåµÇ´Â ¹æ¹ýÀ» º¸´Ù Á÷°üÀûÀ¸·Î º¸À̱â À§Çؼ­ ÀÌ·± ½ÄÀ» ÅÃÇØ º¸¾Ò½À´Ï´Ù.

 

´ÙÀ½À¸·Î ¸Þ½ÃÁö°¡ MultiPartÇüÀÌ ¾Æ´Ò °æ¿ì ±×³É ³»¿ëÀ» »Ñ·ÁÁÝ´Ï´Ù.

 

n       out.print(message[i].getContent() + "<hr>");

 

¸¶Áö¸·À¸·Î ¿­¾ú´ø ConnectionÀ» ´Ý¾ÆÁÝ´Ï´Ù.

 

n        folder.close(false);

n        store.close();

 

ÀÌ·¸°Ô ¸ÞÀÏÀ» ¼ö½ÅÇÏ´Â ÇÁ·Î±×·¥À» ¿¬½ÀÇØ º¸¾Ò½À´Ï´Ù. ºñ·Ï, À¥»ó¿¡¼­ º¸ÀÌ´Â ¸ÞÀϼ­ºñ½º¿Í °°ÀÌ Æú´õ°¡ ±ú²ýÇÏ°Ô ³ª´µÁöµµ ¾Ê°í, ÇÑ±Û Ã³¸® µîÀÇ ¹®Á¦¸¦ ¿Ïº®ÇÏ°Ô ÇØ°áÇØ ³õÁö´Â ¾Ê¾ÒÁö¸¸, ÆÄÀÏ ´Ù¿î·Îµå¸¦ Æ÷ÇÔÇÏ´Â ¸ÞÀÏ ¼ö½ÅÀÇ ±â´ÉÀº ¸ðµÎ ¼³¸íµÇ¾î ÀÖÀ¸´Ï ÁÖÀÇ ±í°Ô »ìÆìº¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

Store Ŭ·¡½º ÁÖ¿ä ¸Þ¼­µå

public abstract Folder getFolder(java.lang.String name) : ÁÖ¾îÁø À̸§ÀÇ Æú´õ°´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.

public void addStoreListener(StoreListener l) : StoreEvent¸¦ À§ÇÑ ¸®½º³Ê¸¦ ´Þ¾ÆÁØ´Ù.

 

Folder Ŭ·¡½º ÁÖ¿ä ¸Þ¼­µå

public abstract void open( mode) : ÁÖ¾îÁø ¸ðµå·Î Æú´õ¸¦ ¿¬´Ù. Folder.READ_ONLY Folder.READ_WRITE°¡ µÉ ¼ö ÀÖ´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºJSP2ºÎ
ÀúÀÚ:ÃÖ¿µ°ü