japanese site
온라인강좌책메일다운로드동아리쇼핑기술지원기업정보갤러리동영상 블로그
『신개념 4단계 리눅스기술지원 시스템 공개』

※ 『무료 리눅스 배포판 배송서비스』 ※

 
JavaMail 메일링 리스트
조회 : 4,077  



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 사용 예제
▷파일첨부 메일


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=626


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저

 
   
 


『신개념 4단계 리눅스기술지원 시스템 공개』

CentOS 리눅스 전문서적 국내최초출시

 
회사소개 | 보도기사 | 채용안내 | 광고안내 | 이용약관 | 개인정보취급방침 | 책임한계와 법적고지 | 불편사항 신고하기 | 사이트맵
ㅇ 서울 : 서울특별시 강남구 노현로79길 66, 402호(역삼동,청송빌딩)  ㅇ 부산 : 부산광역시 해운대구 우동 1470 에이스하이테크21 914호
ㅇ 대표 : 1544-8128 ㅇ부산직통 : 051-744-0077 ㅇ서울직통 : 02-856-0055 ㅇ FAX : 02-6280-2663
ㅇ 사업자번호 : 128-86-68239 ㅇ 통신판매업 신고번호 : 2013-부산금정-0035호 ㅇ 개인정보책임자 : 이재석
ㅇ 상호명 : (주) 수퍼유저 ㅇ 대표자 : 박성수
Copyright ⓒ (주)수퍼유저. All rights reserved.

 아 이 디
 비밀번호
회원 가입 | 비밀번호 찾기

블로그~
 
▷ 웹개발언어
PHP
JSP
python
기타
책제목
리눅스서버관리실무바이블v3.0


저자 박성수
페이지수 2,032 pages
펴낸곳(주)수퍼유저

리눅스 서버 구축 및 관리에 필요한 거의 모든 부분과 전반적인 실무 기법들을 다루고 있음
책제목
리눅스보안관리실무(2/E)


저자홍석범
페이지수 820 pages
펴낸곳(주)수퍼유저

리눅스 보안에 관련된 내용을 종합적으로 쓴 책. 저자의 명성 그대로 보안관련의 모든 내용이 그대로 담겨져 있다.