..열심히 공부하세../JSP

[28] 자바 메일보내기 (첨부파일)

댄스댄스 2012. 3. 6. 11:21

 

파일명 : mail_FileForm.jsp

--------------------------------------------------------

 <%@ page contentType="text/html; charset=euc-kr"  %>

<% String root = request.getContextPath(); // context 추출 %>

<html>
<head>
<title>mail JSP</title>
<link href="<%=root%>/css/style.css" rel="stylesheet" type="text/css">
</head>

<!----------------------------------------------------->
<body leftmargin="0" topmargin="0">
<!----------------------------------------------------->

<div align="center">

<h2>mail 쓰기</h2>
    <form name="mailForm"
          method="post"
          enctype="multipart/form-data"
          action="./mail_FileProc.jsp" >
         
<table border="0" align="center">
<tr>
  <th bgcolor=silver>받는 사람</th>
  <td><input type="text" name="to" size="61" value='prettyimo@nate.com'></td>
</tr><tr>
  <th bgcolor="silver">보내는 사람</th>
  <td><input type="text" name="from" size="61" value='test@prettyimo.cafe24.com'></td>
</tr><tr>
  <th bgcolor='silver'>제 목</th>
  <td><input type="text" name="subject" size="61" value="파일 전송 테스트 메일입니다."></td>
</tr><tr>
  <th bgcolor='silver'>편지 내용</th>
  <td><textarea name="msgText" rows="10" cols="60">파일 전송 테스트 메일입니다.</textarea>
  </td>
</tr>

<tr>
  <th bgcolor='silver'>첨부 파일 1</th>
  <td><input type="file" name="file1" size="50"></td>
</tr>

<tr>
  <th bgcolor='silver'>첨부 파일 2</th>
  <td><input type="file" name="file2" size="50"></td>
</tr>

<tr>
  <th bgcolor=silver>첨부 파일 3</th>
  <td><input type="file" name="file3" size="50"></td>
</tr>


<tr>
  <th bgcolor=silver>첨부 파일 4</th>
  <td><input type="file" name="file4" size="50"></td>
</tr>


<tr>
  <th bgcolor=silver>첨부 파일 5</th>
  <td><input type="file" name="file5" size="50"></td>
</tr>
<tr>
  <th colspan="2"></th>
</tr>
<tr>
  <th colspan="2">
    <input type="submit" value="보내기"> 
    <input type="reset" value="취소"> 
  </th>
</tr>
</table>

</form>

</div>
   

</body>
</html>

--------------------------------------------------------

 

파일명 : mail_FileProc.jsp

--------------------------------------------------------

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import="java.util.*,java.io.*,javax.mail.*" %>
<%@ page import="javax.mail.internet.*,javax.activation.*" %>

<%@ include file="./ssi.jsp" %>

<%
//---------------------------------------------------------------
// Fileupload 콤포넌트 관련 코드, 하나의 파일을 업로드 처리
//---------------------------------------------------------------
String param1 = "";         //일반 폼 태그
FileItem fileItem = null;   //업로드 파일 객체
String filename = "";       //업로드 파일명
UploadManager requestWrap = new UploadManager(request, -1, -1, tempDir);
 
request = requestWrap;
ArrayList fileList = new ArrayList();

// 전송하려는 파일이 최종적으로 5개임으로 5번 순환합니다.
for(int i=1; i<=5; i++){
    fileItem = requestWrap.getFileItem("file" + i);
    long filesize = fileItem.getSize(); // 파일 사이즈
   
    if(filesize > 0) {
        filename = requestWrap.saveFile(fileItem, upDir);
        fileList.add(filename);
       
        out.println("전송된 파일명: " + filename + "  / 전송된 파일 사이즈: " + filesize);
        out.println("<br>");
    }
}
out.println("<br><br>");
%>

<html>
<head>
<title>mail JSP</title>
<link href="<%=root%>/css/style.css" rel="stylesheet" type="text/css">
</head>

<!----------------------------------------------------->
<body leftmargin="0" topmargin="0">
<!----------------------------------------------------->

<div align="center">

<%
// javamail lib 이 필요합니다.
class MyAuthentication extends Authenticator {
    PasswordAuthentication pa;
    public MyAuthentication(){
        pa = new PasswordAuthentication("test@prettyimo.cafe24.com", "test1004");  //ex) ID:cafe24@cafe24.com PASSWD:1234
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return pa;
    }
}


Transport transport;
String host = "mw-002.cafe24.com";                 //smtp mail server
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth","true");

Authenticator auth = new MyAuthentication();
Session sess = Session.getInstance(props, auth);

String subject = toKor(request.getParameter("subject"));  //제목
String msgText = toKor(request.getParameter("msgText"));  //message
    
String from = request.getParameter("from");        //보내는 주소
String to = request.getParameter("to");            //받는 사람


try {
        Message msg = new MimeMessage(sess);
        msg.setFrom(new InternetAddress(from));
        InternetAddress[] address = {new InternetAddress(to)};
        msg.setRecipients(Message.RecipientType.TO, address);
        msg.setSubject(subject);
        msg.setSentDate(new Date());
       
        // 글을 문자만 보낼 경우
        msg.setText(msgText);

        // 글을 HTML 형식으로 보낼 경우
        // msg.setContent(msgText, "text/html;charset=euc-kr");

       
        //--------------------------------------------
        // 첨부 파일 구현 부분
        //--------------------------------------------
        Multipart mpt = new MimeMultipart();
       
        // 메일 내용
        MimeBodyPart mail_text = new MimeBodyPart();
        mail_text.setContent(msgText, "text/html;charset=euc-kr");
       
        String sendfile = "";
       
        for(int i=0; i<fileList.size(); i++){
            sendfile = upDir + "/" + (String)fileList.get(i);

            MimeBodyPart mbp = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(sendfile);
            mbp.setDataHandler(new DataHandler(fds));
            mbp.setFileName(MimeUtility.encodeText(fds.getName(), "KSC5601" , "B"));

            mpt.addBodyPart(mbp);

        }
       
        mpt.addBodyPart(mail_text);
        msg.setContent(mpt);
       
        transport = sess.getTransport("smtp");
        transport.send(msg);
       
        out.println(to + "님에게 메일을 발송했습니다.<br><br>");
        
        // 전송후 파일 삭제
        for(int i=0; i<fileList.size(); i++){
            Utility.deleteFile(upDir, (String)fileList.get(i));
            out.println((String)fileList.get(i) + " 삭제됨.<br>");
        }
       
} catch (MessagingException mex) {
        out.println(mex.getMessage()+"<br>");
        out.println(to + "님에게 메일 발을 실패 했습니다.");
}

%>

</div>
   
</body>
</html>
--------------------------------------------------------

 

파일명 : ssi.jsp

--------------------------------------------------------

<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.util.*, java.io.*" %>
<%@ page import="www.utility.*"%>
<%@ page import="org.apache.commons.fileupload.*" %>

 
<%
request.setCharacterEncoding("euc-kr");

String root = request.getContextPath(); // www_jsp
// System.out.println("root: " + root);
%>

<%
// ----------------------------------------------------------------------------------
// 다운로드 관련 부분
// ----------------------------------------------------------------------------------
// 파일 다운로드 폴더
String downDir = "/storage";
// 파일 저장 폴더
String upDir = application.getRealPath("/storage");
System.out.println("upDir: " + upDir);

// 임시 저장 폴더
String tempDir = application.getRealPath("/temp");
// ----------------------------------------------------------------------------------
%>

<%!
String toKor(String s){
    String str = null;
    try{
        //str = new String(s.getBytes("8859_1"), "KSC5601");// X
        //str = new String(s.getBytes("8859_1"), "UTF-8");  // X
        str = new String(s.getBytes("8859_1"), "EUC-KR"); // X
        // str = new String(s.getBytes("KSC5601"), "euc-kr");  // O 한글 출력 안됨
        //str = new String(s.getBytes("KSC5601"), "UTF-8"); // X
        //str = new String(s.getBytes("KSC5601"), "8859_1");// X
    }catch(Exception e){
       
    }
    return str;
}

%>

--------------------------------------------------------