티스토리 뷰

공부 이야기

[JSP] 이메일 보내기2

판다(panda) 2011. 9. 9. 00:00

메일을 보내기 위해서 가장 중요한것은 바로.. 메일을 보내기 위한 기본 작업입니다..

java email 보내기.. 이 블로그에 자세하게 나와있네요..
 
저는 이것저것 다 설치해놨습니다;..

뭐가 뭔지 잘 모르다 보니.. 그렇게 되버렸는데요;.. 메일을 보내기 위해선 아래 것들이 있어야 한다는군요..

1. Apahe Commons Email
http://jakarta.apache.org/site/downloads/downloads_commons-email.cgi

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

3. JavaBeans Activation Framework
http://java.sun.com/products/javabeans/glasgow/jaf.html

4. smtp daemon
http://www.jsmtpd.org
만약에 PC에 smtp가 설치되어 있지 않다면 이것을 받아서 적당한 곳에 압축을 풀어준후에 etc\jsmtpd-plugin-config.xml의 dnsServers를 실제 사용하고 있는 dns ip로 변경을 해준다.

솔직히 이메일 보내기 정말 간단합니다.. 이런것들만 사전에 되어있다면 말이죠..
요새.. 인터넷이 너무 좋아서 없는것들이 없죠..

지금 이 블로그와서 이글을 보시는 분들도.. 그렇게 생각하실겁니다.. "인터넷엔 없는게 없다".. 고 말이죠..

대부분의 사이트, 블로그, 지식인 가면 거의 다 비슷하거나 똑같을겁니다..

한명이 퍼가고, 다른 한명이 또 퍼가고, 그렇게 퍼가고 하니.. 수십, 수백명이 똑같은 이메일 보내기 소스를 가지고있죠..

지금 쓰는 내용이 이메일 보내기2가 아니라 이메일 보내기1이여야하는데.. 꺼꾸로 되어버렸네요..

이메일 보내기1 쓸때만 해도.. 곧 완성될 줄 알고 기쁜 나머지 올려버렸는데;.. 이것저것 덧붙이는게 더 힘드네요;..

제가 지금 제작하고 있는 메일링프로그램은 파일만해도 19개나 됩니다..

하지만.. 메일만 간단하게 보내고 싶으신 분들을 위한 압축본을 지금부터 시작하겠습니다..

email.jsp 를 하나 만듭니다.. 그리고 email_act.jsp 파일을 하나 만듭니다.. 총 파일 2개로 끝내겠습니다..

우선 email.jsp 입니다..
여기엔 그냥 글쓰기 폼만 넣어봤습니다..
<html>
<head>
<title>이메일</title>
</head>

<table cellspacing = 0 cellpadding = 5 border = 1 width=500>
 <form name=emailform method=post action="email_send.jsp">
  <tr><td><b>보내는 사람</b></td><td><input type=text name=fromemail size=50  maxlength=50></td></tr>
  <tr><td><b>받는 사람</b></td><td><input type=text name=toemail size=50  maxlength=50></td></tr>
  <tr><td><b>제목</b></td><td><input type=text name=emailsubject size=50  maxlength=50></td></tr>
  <tr><td><b>내용</b></td><td><textarea name=emailmemo cols=50 rows=10></textarea></td></tr>
 </form>
</table>

<table cellspacing = 0 cellpadding = 0 border = 0 width=500>
 <tr><td>
 <center>
  <input type=button value="보내기" OnClick="javascript:writeCheck();">
  <input type=reset value="취소">
 </center>
 </td></tr>
</table>
</html>

다음은 email_act.jsp 입니다..
여기서는 메일 발송 처리를 할겁니다..
이게 꼭 있어야 합니다..
<%@ page import="java.io.*, sun.net.smtp.SmtpClient" %>
이게 없으면 메일이 날라가지 않습니다..

지난번 게시판에 추가했던것들 귀찮으니까 또 한번 썼습니다;..
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>
<%@ page language="java" import="java.util.*, java.sql.*, javax.servlet.http.*" %>

<%!
 String TO_DB( String str ) throws Exception
 {
  if( str == null ) return null;
  return new String( str.getBytes( "8859_1" ), "euc-kr" );
 }
%>

폼 값에서 넘어온 값들을 받습니다..

<%
 String fromemail = request.getParameter( "fromemail" );
 String toemail = request.getParameter( "toemail" );
 String server = null;
 String emailsubject = request.getParameter( "emailsubject" );
  if (emailsubject != null) emailsubject = TO_DB( emailsubject );
 String emailmemo = request.getParameter( "emailmemo" );
 emailmemo = TO_DB( emailmemo );

 server = "localhost";

서버는 localhost 로 잡았는데..
유동IP는 스팸메일로 잡는 다는 소문이 있더군요..
그래서 어느 사이트 보니까.. 파일을 더 추가해서 server = "kornet.net" 인가 그걸로 해서 보내더군요..
요 내용에 대해선 검색;.. 하시면 됩니다..

아니면 공유기에 유동아이피를 고정아이피로 설정해서 보내도 되구요..

 try
 {
  SmtpClient sm = new SmtpClient(server);  // email 보닐 smtp 서버
  sm.from(fromemail);
  sm.to(toemail);
  PrintStream msg= sm.startMessage();   // 제목을 포함한 헤더 정보

  msg.print( "from: " );
  msg.println( fromemail );
  msg.print( "to: " );
  msg.println( toemail );
  msg.print( "subject: " );
  msg.println( emailsubject );
  msg.println();        // from,to,subject 와 context를 구분
  msg.println( emailmemo );
  sm.closeServer();
 }
 catch (Exception e)
 {
  out.println(e);
 }
%>

보냈는지 확인 메세지를 화면에 보내줍니다..

<html>
<head>
 <script language=javascript>
  self.window.alert("이메일을 보냈습니다.");
  location.href="email.jsp";
 </script>
</head>
</html>

이러면 이메일 보내기 끝!..

간단하죠?..

하지만 이제부터 제가 강좌할 이메일 보내기를 계속 보시면 이 간단한 소스가 이렇게 변하게 됩니다..
 try
{
    MimeMessage message = new MimeMessage(sess);
    message.setFrom(new InternetAddress(from));
    to = new String(to.getBytes("EUC-KR"), "8859_1");
    InternetAddress[] address = {new InternetAddress(to)};
    message.setRecipients(Message.RecipientType.TO, address);
    message.setSubject(mail_subject, "KSC5601");
    message.setSentDate(new java.util.Date());
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    message.setContent(log+mail_memo,"text/html;charset=euc-kr");
    Transport transport = sess.getTransport("smtp");
    transport.connect();
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
}

앞뒤 다 자르고.. 전송 부분만 붙인건데요.. 뭔가 복잡하죠?.. 저도 이거 하면서 아주 복잡해서 짜증났습니다..

이메일 보내기 글이 점점 늦어지기에.. 간단한것 한번 넣어봤습니다..

그럼 다음엔 진짜 이메일 보내기를 진행하겠습니다..

저작권 표시 꼭!.. 상업적 이용 절대 불가!.. 컨텐츠 변경 안됨!..