±âŸ(framework)
2018.03.30 / 18:32

ÀÚ¹Ù ¸ÞÀÏ - smtp pop3 imap

º½ÀÌ
Ãßõ ¼ö 264

1.¸ÞÀÏ¿¡ ´ëÇÑ ÀÌÇØ

(1)ÀÎÅÍ³Ý ¸ÞÀÏ

-¸ÞÀÏÀü¼Û±Ô¾à(RFC 821 ,SMTP)

-¸ÞÀÏÇü½Ä(RFC 822)

 ÀÎÅͳÝÀ» ÅëÇØ Àü¼ÛµÇ´Â ¸ÞÀÏÀº ASCIIÇüÅ·Π±¸¼º

 1980³â ´ë ÀÌÈÄ ±âÁ¸¸ÞÀÏ ½Ã½ºÅÛ°ú ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅÍ Àü¼ÛÀÌ °¡´ÉÇØÁ³°í

 MIMEŸÀÔÀ¸·Î ¿©·¯ °¡Áö ŸÀÔÀÇ Àü¼ÛÀÌ °¡´ÉÇØÁ³´Ù.

(2)ÇÁ·ÎÅäÄÝ

-SMTP(Simple Mail Transfer Protocol) -¸ÞÀÏÀü¼ÛÇÁ·ÎÅäÄÝ

-POP3(Post Office Protocol3) -¸ÞÀϼö½ÅÇÁ·ÎÅäÄÝ

-IMAPI4(Internet Message Access Protocol4) -¸ÞÀϼö½ÅÇÁ·ÎÅäÄÝ

 

(3)¸ÞÀÏÀü´Þ °úÁ¤

-¸ÞÀÏŬ¶óÀ̾ðÆ®·Î ¸ÞÀÏÀÛ¼º

-¸ÞÀϼ­¹ö¿¡ ÀúÀå

-¸ÞÀϼ­¹ö°¡ µµ¸ÞÀμ­¹ö·Î ºÎÅÍ IP¸¦ µ¹·Á¹Þ¾Æ¼­ ¶Ç ´Ù¸¥ ¸ÞÀϼ­¹öÀÇ pop¼­¹ö¿¡ ÀúÀå

-»ç¿ëÀÚÀÇ ¸ÞÀÏÀбâ

 

(4)¸ÞÀϸ޽ÃÁö

¸ÞÀÏ = ¸ÞÀÏÇì´õ(¼Û½ÅÀÚ+¼ö½ÅÀÚ+¸Þ½ÃÁöID) + ¸ÞÀϳ»¿ë(¸ÞÀÏÅؽºÆ® + ÷ºÎÆÄÀÏ)

 

(5)James ¸ÞÀÏ ¼­¹ö

<1>ÇÁ·Î±×·¥´Ù¿î¹Þ±â

Java Apache Mail Enterprise Server(ÀÚ¹Ù ¾ð¾î ±â¹ÝÀÇ ¿ÀÇ ¼Ò½º)

=>smtp,pop3,imap4¸ðµÎ Áö¿øÇÑ´Ù.

http://james.apache.org ¿¡¼­ ´Ù¿î ¹ÞÀ» ¼ö ÀÖ´Ù

 

 

<2>¼³Ä¡½Ã

jamesÆú´õ ³» appsÆú´õ ³» jamesÆú´õ ³» SAR_INFÆú´õ ³»¿¡ Á¸ÀçÇÏ´Â

config.xmlÀ» ¼öÁ¤ÇØ Áà¾ß ÇÑ´Ù.

 

root »ç¿ëÀÚ ¾ÏÈ£ ¼³Á¤

¸ÞÀÏ ¼­¹ö À̸§ ¼³Á¤

 

DNS ¼­¹ö ÁöÁ¤ - ipconfig.exe·Î È®ÀÎÇÑ ÈÄ ¹Ù²ÙÀÚ.

 

<3>½ÇÇà½ÃÅ°±â

jamesÆú´õ ³»ÀÇ run.batÀ» ½ÇÇà½ÃÅ°¸é ¼­ºñ½º°¡ ½ÇÇàµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

<4>Å×½ºÆ® ¹× »ç¿ëÀÚ µî·Ï

¸ÞÀϼö½Å¼­¹ö ÀÛµ¿Å×½ºÆ®

telnet 1010

¸ÞÀÏ Àü¼Û¼­¹ö ÀÛµ¿Å×½ºÆ®

telnet 21

 

telnet localhost 4555

id,Æнº¿öµå ÀÔ·ÂÇßÀ» ¶§ Á¢¼Ó°¡´ÉÇϸé Å×½ºÆ® ¼º°ø

 

»ç¿ëÀÚ µî·Ï

adduser test 1234

 

»ç¿ëÀÚµé  È®ÀÎ

listusers

 

2.JavaMail ¼Ò°³ ¹× ÀÛ¼º

(1)JavaMail API

-SMTP,POP3,IMAPÇÁ·ÎÅäÄÝÀ» Áö¿øÇϱâ À§ÇÑ API

-JAF(JavaBeans Activation Framework)¿¡ ±â¹Ý

-¸ÞÀÏŬ¶óÀ̾ðÆ®¸¦ À§ÇÑ ±â´É Áö¿ø

 

(2)´Ù¿î¹ÞÀÚ

-javamail ´Ù¿î·Îµå

http://java.sun.com/products/javamail/downloads/index.html

activation.jar¿Í mail.jarÆÄÀÏÀ»

ÀÚ¹ÙÀÇ jre/lib/ext¿¡ º¹»ç

ÅèĹÀÇ common/libÆú´õ¿¡ º¹»ç

 

-jaf ´Ù¿î·Îµå

http://java.sun.com/products/javabeans/glasgow/jaf.html

 

 

(3)¿¹Á¦ ÀÛ¼º

//HelloMail.java

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;

public class HelloMail {
    public static void main(String args[])
        throws MessagingException {

        if(args.length != 4) {
            System.out.print("»ç¿ë¹ý: java HelloMail ");
            System.out.print("<¸ÞÀϼ­¹ö> <º¸³»´Â»ç¶÷À̸§> ");
            System.out.print("<º¸³»´Â»ç¶÷E-mail> <¹Þ´Â»ç¶÷E-mail>");
            System.exit(1);
        }

        String host = args[0];
        String name = args[1];
        String from = args[2];
        String to = args[3];

        Properties prop = System.getProperties();
        Session session = Session.getInstance(prop, null);

        MimeMessage message = new MimeMessage(session);
        try {
         message.setFrom(new InternetAddress(from,name,"KSC5601"));
        } catch(UnsupportedEncodingException e) {
         message.setFrom(new InternetAddress(from));
        }
        message.addRecipient(Message.RecipientType.TO,
            new InternetAddress(to));

        message.setSubject("mail Å×½ºÆ®", "KSC5601");
        message.setSentDate(new Date());
        message.setText("Mail Å×½ºÆ®ÀÔ´Ï´Ù.");

 

        Transport transport = session.getTransport("smtp");
        transport.connect(host, "", "");

        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
}

// ½ºÆÔ¸ÞÀÏ·Î °É·¯Áú °ÍÀ» °¨¾ÈÇÏÀÚ.

 

(4)À¥¸ÞÀÏ ÇÁ·Î±×·¥ ÀÛ¼º

 

//Mail.java

import java.io.*;
import javax.mail.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
 
public class Mail extends HttpServlet {
 String loginPage = "/login.jsp";
 String listPage = "/ListMail";
 String readPage = "/ReadMail";
 String sendPage = "/write_mail.jsp";
 
 public void service(HttpServletRequest req, HttpServletResponse res) 
  throws ServletException, IOException {
  req.setCharacterEncoding("KSC5601");
  boolean login = checkLogin(req, res);
  if(!login) return;   
  try {
   String action = req.getParameter("action");
   if(action == null || action.equals("list")) {
    goTo(req, res, listPage);
   } else if(action.equals("logout")) {
    doLogout(req,res);
   } else if(action.equals("read")) {
    goTo(req, res, readPage);
   } else if(action.equals("delete")) {
    doRemove(req,res);
   } else if(action.equals("reply")) {
    goTo(req, res, sendPage);
   }
  } catch(Exception e) {
   e.printStackTrace();
  }
 }
 

//·Î±×ÀÎ ¿©ºÎ üũÇÑ´Ù.
 protected boolean checkLogin(HttpServletRequest req, 
  HttpServletResponse res) throws ServletException,IOException {
  HttpSession session = req.getSession(true);
  String uid = (String) session.getAttribute("uid");
  boolean login = true;
  if(uid == null) {
   login = false;
   goTo(req, res, loginPage);
  } 
  return login;
 }

 

 protected void goTo(HttpServletRequest req, 
  HttpServletResponse res, String page) throws 
  ServletException, IOException {
  RequestDispatcher dis = req.getRequestDispatcher(page);

//¿øÇÏ´Â ÆäÀÌÁö·Î À̵¿ÇÒ ¼ö ÀÖ´Ù.
  dis.forward(req, res);
 } 
 
 protected void doRemove(HttpServletRequest req, 
  HttpServletResponse res) throws ServletException, 
  IOException, MessagingException {
  Message msg = MailUtil.getMsg(req,res);
  if(msg == null)
   return;
  msg.setFlag(Flags.Flag.DELETED, true);
  goTo(req, res, listPage);
 }
 
 protected void doLogout(HttpServletRequest req, 
  HttpServletResponse res) throws 
  ServletException, IOException, MessagingException {
  HttpSession session = req.getSession(false);
  if(session != null)
   session.invalidate();
  res.sendRedirect(loginPage);
 }
}

 

 

3.¸ÞÀÏ Àü¼Û

(1)MessageŬ·¡½º

-¸ÞÀÏÀ» Ç¥ÇöÇϱâ À§ÇÑ Å¬·¡½º

-Çì´õ + ¸ÞÀÏ ³»¿ë

Çì´õ : ¹Þ´Â »ç¶÷,º¸³»´Â »ç¶÷, ÁÖÁ¦,³¯Â¥

¸Þ¼Òµå

getSubject()

getAllRecipients()

getFolder()

getFlag(Flags.Flag,boolean)

getDataHandler()

setText()

 

(2)MimeMessage

-ÀÎÅÍ³Ý ¸ÞÀÏÀ» À§ÇÑ Å¬·¡½º

-¿©·¯ °³ÀÇ Part·Î ±¸¼ºµÈ ÆÄÀϵéÀ» ÷ºÎÇÒ ¼ö ÀÖ´Ù.

-BodyPartÀÇ ÄÁÅ×ÀÌ³Ê ¿ªÇÒÀ» ÇÏ´Â Multipart Æ÷ÇÔ

DataHandler¸¦ ÀÌ¿ëÇÏ¿© BodyPart¿¡ ÆÄÀÏ Ã·ºÎ

 

-»ý¼ºÀÚ

MimeMessge(Session)

MimeMessage(Session,InputStream)

 

-¸Þ¼Òµå

setContent(Object,String)

setText(String)

setText(String,String)

setFrom(Address)

setRecipients(Message.RecipientType,Address[])

setReply(Address[])

setSentence(Date)

setSubject(String)

 

(3)SessionŬ·¡½º

<1>¸ÞÀÏ ¼¼¼Ç Á¤ÀÇ

-½Ã½ºÅÛ ¼Ó¼º¾ò±â

-ÁÖÀÇ»çÇ×: jspÀÇ ¼¼¼Ç°ú´Â ´Ù¸¥ °³³äÀÌ´Ù.

Transport, StoreŬ·¡½ºÀÇ ÆÑÅ丮 ¿ªÇÒ

 

<2>»ý¼ºÀÚ

Session session = Session.getInstance(props , authentcator)

 

<3>¸Þ¼Òµå

getTansport(String) //Àü¼Û°´Ã¼¾ò±â

getStore()

getStor(Provider)

getStore(String)

geStore(URLName)

 

(4)Transport Ŭ·¡½º

-¸ÞÀÏ ¸Þ½ÃÁö¸¦ ÁÖ¾îÁø ÁÖ¼Ò·Î ¶ó¿ìÆÃÇϱâ À§ÇÑ Å¬·¡½º

-»ý¼ºÀÚ

Transport(Session,URLName);

 

-¸Þ¼Òµå

send(Message)

send(Message,Address[])

sendMessage(Message,Address[]) //¸Þ½ÃÁö Àü´Þ

connect(String,String,String)

 

(5)¸ÞÀÏÀü¼ÛÀýÂ÷

<1>MimeMessage°´Ã¼ »ý¼º

MimeMessage m = new MimeMessage(session);

 

<2>From ¼Ó¼º ¼³Á¤

m.setFrom(new InternetAddress( fromid@naver.com)

 

<3>To ¼Ó¼º ¼³Á¤

InternetAddress a[] = new InternaetAddress[1];

a[0] = new InternetAddress(toid1@naver.com);

m.setRecipients(Message.RecipientType.TO, a);

 

<4>¸ÞÀϳ»¿ë ¼³Á¤

data = "Å×½ºÆ® ¸ÞÀÏÀÌ´Ù";

m.setContent(data,"text/plain");

 

<5>¸ÞÀÏ Àü¼Û

Transport.send(m);

 

(6)¸ÞÀÏÀü¼Û¿¹Á¦

//write_mail.jsp

<%@ page  contentType="text/html;charset=KSC5601" %>
<%  String to = request.getParameter("to");
 if(to == null) to = "";
 String from = request.getParameter("from");
 if(from == null) from = "";
 String subject = request.getParameter("subject");
 if(subject == null) subject = ""; 
%>
<html><head><title>¸ÞÀÏ ÀÛ¼º</title></head>
<link type="text/css" rel="stylesheet" href="/mystyle.css">
<body>
<h3 id='header'>¸ÞÀÏ ÀÛ¼º</h3>
<div id='menu'>
 <%@ include file="mailmenu.jsp"%>
</div>
<div id='main'>
 <form action=/SendMail method=post enctype='multipart/form-data'
 <table width=100% cellpadding=2>
 <tr><td>º¸³»´ÂÀÌ</td>
  <td><input type=text name=from value='<%=from%>'></td></tr>
 <tr><td>¹Þ´ÂÀÌ</td>
  <td><input type=text name=to value='<%=to%>'></td></tr>
 <tr><td>ÂüÁ¶</td>
  <td><input type=text name=cc></td></tr>
 <tr><td>Á¦¸ñ</td>
  <td><input type=text name=subject value='<%=subject%>'></td></tr>
 <tr> <td colspan=2>
  <textarea name=body cols=80% rows=15></textarea></td></tr>
 <tr><td>÷ºÎÆÄÀÏ</td><td><input type=file name=attach></td></tr>
 <tr><td colspan=2 align=center>
  <input type=submit value=Àü¼Û>
  <input type=reset value=Ãë¼Ò></td>
 </tr>
 </table>
 </form>
</div>
</body>
</html>

 

//SendMail.java

import java.io.*;
import java.util.Date;
import javax.mail.*;
import javax.servlet.*;
import javax.activation.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
import com.oreilly.servlet.*;

public class SendMail extends HttpServlet {
 protected String mailserver;
 protected int max = 5 * 1024 * 1024;
 
 public void init(ServletConfig conf) throws ServletException {
  super.init(conf);
  mailserver = getInitParameter("mailserver");
  if(mailserver == null) {
   mailserver = "localhost";
  }
 } 
 
 public void doPost(HttpServletRequest req, HttpServletResponse res)
  throws IOException {
  res.setContentType("text/html;charset=KSC5601");
  PrintWriter out = res.getWriter();
  ServletContext cxt = getServletContext();
  String dir = cxt.getRealPath("tmp"); //¹Ì¸® Àӽà Æú´õ¸¦ Çϳª »ý¼ºÇÏÀÚ .
  MultipartRequest mreq = 
   new MultipartRequest(req, dir, max, "KSC5601");  
  String from = mreq.getParameter("from");
  String to = mreq.getParameter("to");
  String cc = mreq.getParameter("cc");
  String subject = mreq.getParameter("subject");
  String body = mreq.getParameter("body");

  try {
   Session session 
    Session.getInstance(System.getProperties(), null);


   MimeMessage msg = new MimeMessage(session);   


   msg.setHeader("Content-Transfer-Encoding",  "base64");
   int index = from.indexOf("<");
   String senderName = from;
   if(index != -1) {
    senderName = from.substring(0, index);
    from = from.substring(index+1, from.length()-1);
   }

//¼Û½ÅÀÚ¼³Á¤
   msg.setFrom(new InternetAddress(from, senderName, "KSC5601"));   
   
   //InternetAddress[] tos = InternetAddress.parse(to); 

 

//¼ö½ÅÀÚ ¼³Á¤
   InternetAddress[] tos = MailUtil.parse(to);
   msg.setRecipients(Message.RecipientType.TO, tos);   
   if(cc != null && cc.trim().length() != 0) {
    InternetAddress[] ccs = MailUtil.parse(cc);
    msg.setRecipients(Message.RecipientType.CC, ccs);
   }   
   msg.setSubject(subject, "KSC5601");
   msg.setSentDate(new Date());

 

//³»¿ëÃß°¡
   Multipart mpart = new MimeMultipart(); 
   // ¸ÞÀÏ ³»¿ë(ÅؽºÆ®)À» ¸ÞÀÏ Multipart¿¡ Ãß°¡
   BodyPart text = new MimeBodyPart();
   text.setContent(body, "text/plain;charset=KSC5601");
   mpart.addBodyPart(text);   
   
   String fileName = mreq.getFilesystemName("attach");
   if(fileName != null) { //÷ºÎ ÆÄÀÏÀÌ ÀÖ´Â °æ¿ì
    String name = fileName;
    //ÇÑ±Û ÆÄÀÏ À̸§À» Base64 ÀÎÄÚµùÀ¸·Î º¯°æ 
    name = MimeUtility.encodeText(name, "KSC5601", "B");
    // ¾÷·ÎµåµÈ ÆÄÀÏÀº /tmp µð·ºÅ丮¿¡ ÀúÀåµÊ 
    fileName = "/tmp/" + fileName;
    fileName = getServletContext().getRealPath(fileName);
    // ÂüºÎ ÆÄÀÏÀ» ¸ÞÀÏ Multipart¿¡ Ãß°¡
    DataSource attachFile = new FileDataSource(fileName);
    BodyPart part = new MimeBodyPart();
    part.setDataHandler(new DataHandler(attachFile)); 
    part.setFileName(name); 
    mpart.addBodyPart(part);
   } 
   msg.setContent(mpart);
   msg.saveChanges();

   Transport transport = session.getTransport("smtp");
   if(mailserver.equals("localhost")) {
    transport.send(msg, msg.getAllRecipients()); 
   } else {
    transport.connect(mailserver, "", "");
    transport.sendMessage(msg, msg.getAllRecipients());
   }
   transport.close();
   if(fileName != null) { // ¾÷·ÎµåµÈ ÆÄÀÏ »èÁ¦
    File f = new File(fileName);
    f.delete();
   }
  } catch(Exception e) {
   out.println("<hr><b>¸ÞÀÏ Àü¼Û ¿¡·¯</b><pre>");
   e.printStackTrace(out);
   out.println("</pre>");
   out.flush();
   return;
  }
  out.println("<html><head><title>¸ÞÀÏ Àü¼Û</title></head>");
  out.println("<body>");
  out.println("¸ÞÀÏÀÌ ¼º°øÀûÀ¸·Î Àü¼ÛµÇ¾ú½À´Ï´Ù.<br>");
  out.print("<a href=/Mail>¸ÞÀÏ ¸ñ·Ï</a>");
  out.println("</body></html>");
 }
}

 

4.¸ÞÀÏ Àбâ

(1)StoreŬ·¡½º

-StoreŬ·¡½º :½Ã½ºÅÛ Àüü¿¡¼­ ¸ÞÀÏÀÌ ÀúÀåµÇ´Â °÷

 

(2)FolderŬ·¡½º

-¸ÞÀÏ ¸Þ½ÃÁö¸¦ Æ÷ÇÔÇÏ´Â Æú´õ¸¦ Ç¥ÇöÇÑ´Ù

»ç¿ëÀÚº°·Î Àü´ÞµÈ ¸ÞÀÏ°ü¸®(ÆíÁöº¸°üÇÔ)

-Æ®¸®ÇüÅ·Π±¸¼ºµÇ¾î ÀÖ´Ù.

-StoreŬ·¡½ºÀÇ getFolder()¸Þ¼Òµå ÀÌ¿ë

-INBOX Æú´õ -> ¹ÞÀº ÆíÁöÇÔ

-¸Þ¼Òµå

getMessageCount()

getMessage(int)

open(int)

close(boolean)

create(int)

delete(boolean)

exits()

getMode()

getName()

getParent()

list()

 

(3)URLNameŬ·¡½º

-URLÀÇ À̸§À» Ç¥ÇöÇÑ´Ù

-»ý¼ºÀÚ

URLName(String)

URLName(String,String,int,String,String,String)

URLName(URL)

 

-¸Þ¼Òµå

getFile()

getHost()

getPassword()

getPort()

getProtocol()

getURL()

getUsername()

 

(4)Flags/Flags.FlagŬ·¡½º

<1>Flag Ŭ·¡½º

-¸ÞÀÏ ¸Þ½ÃÁöÀÇ Ç÷¡±× Ç¥Çö

 

<2>Flags.Flag

-¹Ì¸® Á¤ÀÇµÈ ½Ã½ºÅÛ Ç÷¡±×µéÀ» Ç¥ÇöÇÑ´Ù.

 

Message m = folder.getMessge(1); //ù¹ø° ¸ÞÀϸ޽ÃÁö¸¦ ¾ò´Â´Ù.

m.setFlag(Flags.Flag.DELETED,true);

if(m.isSet(Flags.Flag.DELETED))

{

  System.out.println("»èÁ¦µÈ ¸Þ½ÃÁöÀÔ´Ï´Ù");

 }

 

(5)¿¹Á¦

 

//MailUtil.java

import java.io.*;
import javax.mail.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
import java.text.SimpleDateFormat;
import java.util.*;

public class MailUtil {
 public static Folder getInbox(HttpServletRequest req, 
  HttpServletResponse res) 
  throws IOException, ServletException, MessagingException {  
  HttpSession session = req.getSession(true);
  InboxManager inboxManager = 
    (InboxManager) session.getAttribute("inboxmanager"); 
  
  if(inboxManager == null) {
   String uid = (String) session.getAttribute("uid");
   String passwd = (String) session.getAttribute("password");
   if(uid == null) {
    String page = "/login.jsp";
    RequestDispatcher dis = req.getRequestDispatcher(page);
    dis.forward(req, res); 
    return null;
   }
   URLName url = 
    new URLName("pop3", "localhost", 110, "", uid, passwd);

//Á¦ÀÓ½º¼­¹öÀÇ ¾ÆÀ̵ð´Â µðºñ¿¡µµ Á¸ÀçÇØ¾ß ÇÑ´Ù.
   inboxManager = new InboxManager(url);
   session.setAttribute("inboxmanager", inboxManager);
  } else
   inboxManager = 
    (InboxManager)session.getAttribute("inboxmanager");
  return inboxManager.getInbox();
 } 
 
 public static Message getMsg(HttpServletRequest req, 
  HttpServletResponse res) 
  throws IOException, ServletException, MessagingException {

  String msgst = req.getParameter("msg");
  if(msgst != null) {
   int msgnr = Integer.parseInt(msgst);
   Folder inbox = getInbox(req,res);
   if(inbox == null)
    return null;
   else
    return inbox.getMessage(msgnr);
  } 
  return null;
 } 
 
 public static void printAddresses(Address[] addresses, 
  PrintWriter out) {  
  if(addresses == null)
   return;
  
  for(int i = 0; i < addresses.length; i++) {
   String name = addresses[i].toString();
   try {
    name = MimeUtility.decodeText(name); 
   } catch(UnsupportedEncodingException e){ }
   name = name.replaceAll("<", "&lt;");//¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
   if(i == 0)
    out.print(name);
   else 
    out.print("," + name);
  }
 }
 
 public static String getAddress(Address[] addresses) {
  if(addresses == null)
   return "";
  String name = addresses[0].toString();
  try {
   name = MimeUtility.decodeText(name); 
  } catch(UnsupportedEncodingException e){ }
  name = name.replaceAll("<", "&lt;");
  return name;
 }
 
 public static void printDate(Date date, PrintWriter out) {
  SimpleDateFormat fmt = new SimpleDateFormat("yy/MM/dd HH:mm");
  out.println(fmt.format(date));
 }
 
 public static InternetAddress[] parse(String addr) {  
  StringTokenizer st = new StringTokenizer(addr, ",;", false);
  int count = st.countTokens();  
  InternetAddress ia[] = new InternetAddress[count];
  int i = 0;
  while(st.hasMoreTokens()) {
   String token = st.nextToken();   
   try {
    int index = token.indexOf('<');
    String email = token, name = "";
    if(index != -1) {
     name = token.substring(0, index);
     email = token.substring(index+1, token.length()-1);
    }
    ia[i] = new InternetAddress(email, name, "KSC5601");
   } catch(UnsupportedEncodingException e) { 
    e.printStackTrace();
   }
   i++;
  }
  return ia;
 }
}

 

//InboxManager.java

import java.io.*;
import javax.mail.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.internet.*;

public class InboxManager implements HttpSessionBindingListener {
 static private Session session = 
  Session.getDefaultInstance(System.getProperties(),null);
 private Store store;
 private Folder inbox;
 
 public InboxManager(URLName url) 
  throws NoSuchProviderException, MessagingException {
  
  store = session.getStore(url);
  store.connect();
  inbox = store.getFolder("INBOX");
  inbox.open(Folder.READ_WRITE);
 }
 
 public Folder getInbox() {
  return inbox;
 }
 
 public void valueBound(HttpSessionBindingEvent event) { } //¼¼¼ÇÀ» ¹ÞÀ» ¶§
 
 public void valueUnbound(HttpSessionBindingEvent event) { //¼¼¼ÇÀÌ ´ÝÈú ¶§
  try {
   inbox.close(true);
   store.close();
  } catch(MessagingException e) { }
 }
}


 

//ListMail.java

import java.io.*;
import javax.mail.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
 
public class ListMail extends HttpServlet {
 public void service(HttpServletRequest req, HttpServletResponse res) 
  throws ServletException, IOException {
  res.setContentType("text/html;charset=KSC5601"); 
  PrintWriter out = res.getWriter();
  out.println("<html><head>");
  out.println("<title>¸ÞÀÏ Àбâ</title>");
  out.print("<link type='text/css' rel='stylesheet' ");
  out.println(" href='/mystyle.css'> </head>");
  out.print("<body><h3 id='header'>¸ÞÀÏ ¸ñ·Ï</h3>");
  out.println("<div id='menu'>");
  ServletContext sc = getServletContext();
  RequestDispatcher rd = sc.getRequestDispatcher("/mailmenu.jsp");
  rd.include(req, res);  
  out.println("</div>");
  out.println("<div id='main'>");
  try {
   Folder inbox = MailUtil.getInbox(req,res);
   if(inbox == null)
    return;
   int count = inbox.getMessageCount();
   out.println("<table width=100%>"); 
   out.print("<tr><th>º¸³½ÀÌ</th><th>¸ÞÀÏÁ¦¸ñ</th>");
   out.println("<th>³¯Â¥</th><th>Å©±â</th><th>»èÁ¦</th></tr>");
   for(int i = 1; i <= count; i++) {
    Message msg = inbox.getMessage(i);    
    if(!msg.isSet(Flags.Flag.DELETED)) {
     out.print("<tr><td colspan=5 height=1 ");
     out.print(" background=/image/dotline.gif></td></tr>"); 
     out.print("<tr class=grp>");
     out.print("<td>");
     MailUtil.printAddresses(msg.getFrom(), out);
     out.print("</td>");     
     out.print("<td><a href=/Mail?action=read&msg=");
     out.print(i +">");
     out.print(msg.getSubject()+"</a></td>");                   //¸ÞÀϳ»¿ëº¸±â¸µÅ©
     out.print("<td>"); 
     MailUtil.printDate(msg.getSentDate(), out);
     out.print("</td>");
     out.print("<td>" + msg.getSize() / 1024+"KB</td>");
     out.print("<td><form action=/Mail method=post>");
     out.print("<input type=hidden name=action ");
     out.print(" value=delete>");
     out.print("<input type=hidden name=msg ");
     out.print(" value="+ i +">");
     out.print("<input type=submit value=»èÁ¦>");
     out.println("</form></td></tr>");
     out.print("<tr><td colspan=5 height=1 ");
     out.print(" background=/image/dotline.gif></td></tr>"); 
    }
   }
  } catch(MessagingException e) {
   e.printStackTrace();
  }
  out.println("</table>");
  out.println("</div>");
  out.println("</body></html>");
 }
}

//mailmenu.jsp

<%@ page contentType="text/html;charset=KSC5601" %>
<div id="menucontainer">
 <div id="shatop"></div>
 <h3 class="center">¸Þ ´º</h3>
 <div class="blank">&nbsp;</div>
 <a href=/login.jsp>¸ÞÀÎÆäÀÌÁö</a>   
 <div class="blank">&nbsp;</div>
 <a href=/Mail?action=list>¸ñ·Ïº¸±â</a>  
 <div class="blank">&nbsp;</div>
 <a href=/Mail?action=reply>ÆíÁö¾²±â</a>
 <div class="blank">&nbsp;</div>
 <div id="shabottom"></div>  
</div>

 

//ReadMail.java

import java.io.*;
import javax.mail.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
 
public class ReadMail extends HttpServlet {
 public void service(HttpServletRequest req, HttpServletResponse res) 
  throws ServletException, IOException {
  res.setContentType("text/html;charset=KSC5601");
  try {
   Message msg = MailUtil.getMsg(req,res);
   if(msg == null)
    return;    
   if(req.getParameter("part") == null)
    printMessage(msg, req, res);
   else
    printPart(msg,req,res);
  } catch(MessagingException e) { }
 }
 
 protected void printMessage(Message msg, HttpServletRequest req, 
  HttpServletResponse res) throws ServletException, 
  IOException, MessagingException {  
  PrintWriter out = res.getWriter();
  printHead(msg,req,res);
  out.println("<table width=100% class=body>");
  out.println("<tr><td>");
  if(msg.isMimeType("multipart/*")) {
   Multipart multipart = (Multipart)msg.getContent();
   for(int i = 0;i < multipart.getCount();i++) {
    Part p = multipart.getBodyPart(i);
    if(p.isMimeType("text/plain")||p.isMimeType("text/html")) {
     String mime = msg.getContentType();
     int index = mime.indexOf(";");
     if(index < 0) {
      out.print((String)p.getContent());
     } else {
      out.print(p.getContent());
     }
    } else {
     String filename = p.getFileName();
     out.print("<p class=menu><a href=/ReadMail?msg=");
     out.print(msg.getMessageNumber()+"&part="+i);
     out.print(">÷ºÎ ÆÄÀÏ</A>");
    }   
   }
  } else if(msg.isMimeType("text/plain") 
   || msg.isMimeType("text/html")) {
   String mime = msg.getContentType();
   int index = mime.indexOf(";");
   if(index < 0) {
    out.print((String)msg.getContent());
   } else {
    out.print(msg.getContent());
   }
  } else { 
   String mime = msg.getContentType();
   if(mime.startsWith("text")) {
    out.println(msg.getContentType());
    out.print(msg.getContent()); 
   } else {
    out.print("<p class=menu><a href=/ReadMail?msg=");
    out.print(msg.getMessageNumber()+"&part=-1");
    out.print(">÷ºÎ ÆÄÀÏ</A>");
   }
  }
  out.println("</td></tr></table>");
  out.flush();
 }
 
 protected void printHead(Message msg, HttpServletRequest req, 
  HttpServletResponse res) throws IOException, 
  ServletException, MessagingException {
  PrintWriter out = res.getWriter();
  out.println("<html><head><title>¸ÞÀÏ Àбâ</title>");
  out.print("<link type='text/css' rel='stylesheet' ");  
  out.println("href='/mystyle.css'></head>");
  out.println("<script>");
  out.print("function send(cmd) {");
  out.print(" if(cmd == 'reply') {");
  out.print("  document.myform.action.value = 'reply';");
  out.print(" } else if(cmd == 'list') {");
  out.print("  document.myform.action.value = 'list';");
  out.print(" }");
  out.print(" document.myform.submit();");
  out.print("}");
  out.println("</script>");
  out.print("<body><h3 id='header'>¸ÞÀÏ Àбâ</h3>");
  out.println("<div id='menu'>");
  ServletContext sc = getServletContext();
  RequestDispatcher rd = sc.getRequestDispatcher("/mailmenu.jsp");
  rd.include(req, res);  
  out.println("</div>");
  out.println("<div id='main'>");    
  out.print("<form><input type=button value=´äÀå ");
  out.println("onClick=send('reply')>");
  out.print("<input type=button value=¸ñ·Ïº¸±â ");
  out.println("onClick=send('list')></form>");
  out.println("<table width=99%>");
  out.println("<tr><td width=100 class=title>º¸³½ÀÌ</td><td> ");
  out.println(MailUtil.getAddress(msg.getFrom()));
  out.println("</tr><tr><td class=title>¹Þ´ÂÀÌ</td><td> ");
  MailUtil.printAddresses(
   msg.getRecipients(Message.RecipientType.TO), out);
  out.println("</td></tr>");
  out.println("<tr><td class=title>ÆíÁöÁ¦¸ñ</td><td> ");
  out.println(msg.getSubject() + "</td></tr>");
  out.println("</table>");
  out.println("<form name=myform action=/Mail method=post>");
  out.println("<input type=hidden name=action value=list>");
  out.println("<input type=hidden name=to value='"+ 
   MailUtil.getAddress(msg.getFrom()) +"'>");
  out.println("<input type=hidden name=from value='" + 
   MailUtil.getAddress(msg.getRecipients(
    Message.RecipientType.TO)) + "'>");
  out.println("<input type=hidden name=subject value='RE:" + 
   msg.getSubject() +"'>");  
  out.println("</form>");
  out.flush();
 }
 
 protected void printPart(Message msg, HttpServletRequest req, 
  HttpServletResponse res) 
  throws IOException, MessagingException {  
  int partnr = Integer.parseInt(req.getParameter("part"));
  Part p;
  if(partnr < 0) {
   p = msg;
  } else {
   Multipart multipart = (Multipart)msg.getContent();
   p = multipart.getBodyPart(partnr);
  }  
  res.setContentType(p.getContentType());
  if(p.getFileName() != null) {
   res.setHeader("Content-Disposition", "attachment; filename=\"" 
    + p.getFileName() + "\"");
  }
  OutputStream out = res.getOutputStream();
  InputStream in = p.getInputStream();
  int c = in.read();
  while(c != -1) {
   out.write(c);
   c = in.read();
  }
 }
}

//web.xmlÆÄÀÏ ¼öÁ¤

<servlet>

 <servlet-name>Mail</servlet-name>

 <servlet-class>Mail</servlet-name>

</servlet>

 

<servlet>

 <servlet-name>SendMail</servlet-name>

 <servlet-class>SendMail</servlet-name>

</servlet>

 

<servlet>

 <servlet-name>ListMail</servlet-name>

 <servlet-class>ListMail</servlet-name>

</servlet>

 

<servlet>

 <servlet-name>ReadMail</servlet-name>

 <servlet-class>ReadMail</servlet-name>

</servlet>

 

<servlet-mapping>

 <servlet-name>Mail</servlet-name>

 <url-pattern>/Mail</url-pattern>

</servlet-mapping>

 

<servlet-mapping>

 <servlet-name>SendMail</servlet-name>

 <url-pattern>/SendMail</url-pattern>

</servlet-mapping>

 

<servlet-mapping>

 <servlet-name>ListMail</servlet-name>

 <url-pattern>/ListMail</url-pattern>

</servlet-mapping>

 

<servlet-mapping>

 <servlet-name>ReadMail</servlet-name>

 <url-pattern>/ReadMail</url-pattern>

</servlet-mapping>