강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

JavaMail 메일링 리스트

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.gif title23.gif

2001-03-31 kenu


csv, 무슨 뜻이게요. comma separated version 컴마로 구분된 파일입니다. 어떻게 만드냐구요? 메모장으로 만들거나, excel로 만들거나 하여간 쉽게 만들 수 있습니다. db에 있는 것들을 그냥 컴마로 구분해서 출력해서 저장해도 됩니다.

db에 있는 목록을 이용해서 메일링리스트를 구현한다면, 번거로운 것이 너무 많습니다. db도 설치해야지, 세팅해야지, jdbc 설정해줘야 되죠, 거기다가 메일링 전송하는 동안 db를 꽉 붙잡고 있어서 부하도 주죠.

csv 파일을 이용하면 일단 목록만 text로 저장해 놓으면 됩니다. 아웃룩 express 의 주소록에 있는 사람들도 파일>내보내기 를 보시면 csv 형식으로 파일을 생성할 수 있도록 되어있습니다.

메일링 리스트를 사용하는 이유는 다른 사람의 email주소랑 섞여서 메일이 가지 않도록 하기 위해서입니다. ^^; 잘 아시는 내용이죠.

그럼 샘플 파일 등장합니다. maillist.csv 로 저장된 파일이고 내용은 다음과 같습니다.

[소스파일 다운받기]

maillist.csv

허광남,kenu@okjsp.pe.kr
이달님,moon888@hanmail.net
허예빈,yevin71@hotmail.com
허광남2,heogn@hanmail.net
허광남3,heogn@shinbiro.com
허광남4,heogn@yahoo.co.kr
허광남5,heogn@popsmail.com
허광남6,heogn@netsgo.com
허광남7,heogn@netian.com
허광남8,heogn@orgio.net
허광남9,gnheo@korea.com
허광남10,heogn@hotmail.com

헉, 제 메일주소가 10개가 넘네요. 다 쓰냐구요? ^^; 다 씁니다. 다 합치면 100메가 훨씬 넘을 겁니다. ^^; 욕심도 많다구요? netsgo하고 okjsp 빼고는 다 공짜죠. 메일링 테스트 하실 때, 좋은 말씀 한 구절 써서 보내주세요. 아니면 자신의 메일주소 2~3개 집어넣고 테스트를 하시구요. 메일링을 잘못 이용해서 스팸으로 판정이 되면 법적으로 많이 불리해 집니다. 그러니 조심해서 사용하시는 것이 좋습니다.

이 maillist.csv 파일을 c:/jsphome/mlist/maillist.csv 에 위치시킵니다. 아무 곳에나 놔도 괜찮습니다만 파일의 절대경로를 꼭 기억하십시오. 위치 값을 바꿔줘야 하니까요.

메일내용을 입력하는 소스는 다음과 같습니다.

maillist0.jsp

<html>
<head>
<title>메일링리스트 전체메일보내기</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script language="javascript">
function preview(n) {
var nw = window.open('about:blank','prevw','width=600,height=400,resizable=yes,scrollbars=yes');
nw.document.writeln(form1.mailsubj.value);
nw.document.writeln('<hr noshade size=1>');
nw.document.writeln(form1.mailbody.value);
nw.document.writeln('<hr noshade size=1><div align=right><a href="#" onClick="self.close()">창닫기</a></divss>');
nw.focus();
}

function lastcheck(n) {
if (n.mailbody.value.length<10) {
alert("내용이 너무 짧습니다.");
return false;
}
return confirm("전체 메일을 보내시겠습니까?");
}
</script>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<p>메일링리스트 전체메일보내기</p>
<form name="form1" method="post" action="maillist1.jsp" onSubmit="return lastcheck(this)">
<p>
제목:<input type="text" name="mailsubj" size="66" ><br>
<textarea name="mailbody" cols="70" rows="16" wrap="VIRTUAL"></textarea>
<br>
메일에 포함되는 이미지는 웹에서의 전체 경로를 적어주어야 합니다.<br>
예:) http://www.okjsp.pe.kr/images/okjsp_01.gif</p>
<p align="center">
<input type="button" name="Button" value="미리보기" onClick="preview(this)">
<input type="submit" name="Submit" value="전체메일보내기">
</p>
</form>
<p>&nbsp; </p>
</body>
</html>

preview(n) 함수는 보낼 메일의 html이 잘 배치되어 있나 새 창을 띄워서 볼 수 있게해줍니다. 미리보기 버튼을 누르면 기능하는 자바스크립트 입니다.

lastcheck(n) 함수는 메일의 내용의 길이와 보내기 전에 마지막으로 확인메시지를 띄우는 기능을 하는 javascript 입니다.

이것은 jsp 하고 문법이 다르니까요. 제발 헷갈리지 마세요. javascript는 웹브라우저에서 실행되는 프로그램이고, jsp는 웹서버에서 실행되는 프로그램입니다. 따라서 한 파일 안에서 javascript 변수와 jsp변수가 값을 서로 주고받을 수 없습니다. jsp변수가 갖고 있는 것을 javascript쪽으로 전달할 수 있지만 javascript 가 갖고 있는 값을 jsp변수에 넣어주려면 페이지 reload이나 전환이 필요합니다. 나중에 더 자세히 얘기하죠. 초보들의 가장 빈번한 실수 중에 하나라서 여기서 한번 말을 꺼내봤습니다.

드림위버나 나모로 예쁘게 작성을 한 웹페이지 소스를 여기에 붙여넣어도 좋습니다. 다만 이 메일링리스트 소스는 파일을 첨부하지 않습니다. 각자 기호에 맞게 마음대로 수정하셔도 좋습니다. 지난 강좌 참고하시면 가능할 겁니다. 그리고, img 경로는 full url을 써주세요.

http://www.okjsp.pe.kr/images/okjsp_01.gif

이런 식으로요. 물론 그 위치에 파일이 있어야겠죠.

마지막으로 처리해주는 파일입니다. maillist.csv 파일을 읽어서 한사람씩 메일을 보내는 역할을 합니다. maxi74@hanmail.net 님의 도움으로 쉽게 메일주소와 이름이 한꺼번에 갑니다.
[관련 글] http://board16.free.cgiserver.net/CrazyWWWBoard.cgi?mode=read
&num=763&db=heogn01b&backdepth=1

소스에 설명을 해놓아서 따로 설명드리지는 않겠습니다.

maillist1.jsp

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

// 메일 상수
String from = "kenu@okjsp.pe.kr";
String fname = "허광남";
String host = "localhost";

// 메일 제목,내용
String mailSubj = request.getParameter("mailsubj");
String msgText = request.getParameter("mailbody");
mailSubj = new String(mailSubj.getBytes("8859_1"),"euc-kr");
msgText = new String(msgText.getBytes("8859_1"),"euc-kr");


Message msg = null;

// 프로퍼티 값 인스턴스 생성과 기본세션(SMTP 서버 호스트 지정)
Properties props = new Properties();
props.put("mail.smtp.host", host);

Session sess = Session.getDefaultInstance(props, null);

// csv 파일 읽어들이기
FileReader testRead;
testRead = new FileReader ("c:/jsphome/mlist/maillist.csv");
int tempChar;
StringBuffer sbuf = new StringBuffer();
String tmp = "", tname = "", to = "";
int i = 0;

// StringBuffer sbuf 에 저장
do {
tempChar = testRead.read();
if (tempChar == -1) break;
sbuf.append((char)tempChar);
} while(true);

// StringBuffer 를 한줄씩 끊어 읽고 ',' 구분해서 순차적으로 메일보내기
StringTokenizer sto = new StringTokenizer(sbuf.toString()," ");
while(sto.hasMoreElements()) {
tmp = sto.nextElement().toString();
i = tmp.indexOf(",");
tname = tmp.substring(0,i);
to = tmp.substring(i+1);
out.println(to+"<br>");

// 메일 보내기
try {
// create a message

InternetAddress[] address = {new InternetAddress(to)};
InternetAddress fadd = new InternetAddress();
fadd.setAddress(from); // 보내는 사람 email
fadd.setPersonal(fname,"EUC-KR"); // 보내는 사람 이름

msg = new MimeMessage(sess);
msg.setFrom(fadd);
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(mailSubj);
msg.setSentDate(new Date());
msg.setContent(msgText,"text/html;charset=euc-kr"); // HTML 형식

Transport.send(msg);

} catch (MessagingException mex) {
out.println(mex.getMessage());
out.println(host+"접속에 문제가 생겼네요. 발송하지 못했습니다.");
} // end try

} // end while

%>
<hr><a href='http://www.okjsp.pe.kr'>www.okjsp.pe.kr</a>


오늘 강좌 이만하면 되겠죠. 잘 쓰세요.

 

참고 : javamail1.2 pakage의 demo/sendfile.java
http://java.sun.com/products/javamail/index.html

kenu: heogn@shinbiro.com
http://okjsp.pe.kr

관련 강좌
▷JavaMail 설치
▷JavaMail 사용 예제
▷파일첨부 메일

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  74 명