ÀÚ¹Ù ¸ÞÀÏ - smtp pop3 imap
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("<", "<");//¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
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("<", "<");
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"> </div>
<a href=/login.jsp>¸ÞÀÎÆäÀÌÁö</a>
<div class="blank"> </div>
<a href=/Mail?action=list>¸ñ·Ïº¸±â</a>
<div class="blank"> </div>
<a href=/Mail?action=reply>ÆíÁö¾²±â</a>
<div class="blank"> </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>
[Ãâó] [JSP - ¿Ç÷°ÀÇ-Á¤¸®³ëÆ®]ÀÚ¹Ù ¸ÞÀÏ|ÀÛ¼ºÀÚ Àå¹Ìºû¹Ù´Ù