─━ IT ━─

자유 형식의 폼으로 투함된 내용을 메일 보내다

DKel 2021. 8. 16. 00:54
반응형
처음에 웹 어플리케이션을 구축하고 있다 보면 어떤 액션의 타이밍에 메일을 보내고 싶다고 하는 경우가 많습니다.예를 들어 워크플로우 시스템이면 자신의 처리를 마치고 다음 사람에게 처리를 돌리는 타이밍에 ′처리의뢰 통지′를 발신하도록 하면 사용자는 항상 시스템을 확인할 필요가 없어집니다.또한 포럼 어플리케이션 등이라면 신규 글이 올라온 타이밍에 등록 사용자에게 메일을 통지하는 것도 편리할 수 있습니다.물론 처음부터 끝까지 메일에 의존하는 것도 생각해 볼 일이지만, 보조적인 수단으로 메일 알림을 섞어서 보다 사용자 친화적인 애플리케이션을 구축할 수 있을 것입니다.본 글에서는 이러한 메일 알림 기능을 쉽게 구현하기 위한 구조를 소개합니다.메일 본문을 템플릿으로 외부 파일 관리할 수 있으므로 용도에 따라 자유롭게 전달 포맷을 커스터마이즈할 수 있는 것이 특징입니다.필요한 환경 본고로 소개하는 메일 통지 기능은, JSP1.2 & 서블릿 2.3 환경에서 동작하는 서블릿입니다.이용하는데 있어서는, 이하의 소프트웨어가 최저한 필요하게 됩니다.이것들 소프트웨어의 인스톨 방법에 대해서는, 저자 사이트 「서버 사이드 기술의 학습사」에서 「서버 사이드 환경 구축 설정」을 참조해 주세요.J2SE 5 . 0 _ 02
JSP&서블릿 컨테이너(Tomcat 5.5.7에서 확인 완료)
JavaMail
JAF(Java Activation Framework) 샘플코드는 .war 형식으로 제공하고 있습니다.기사 상부의 링크에서 다운로드할 수 있는 「CZ_MailTransfer.war」를 「%CATALINA_HOME%/webapps」폴더 하에 배치해, 컨테이너를 재기동하는 것으로 자동적으로 전개됩니다.또 샘플 폴더′/CZ_MailTransfer′배 밑에는 커스텀 태그를 실제로 시험하기 위한 ′sample.jsp′, 및 테스트용 템플릿으로 ′/WEB-INF/data′폴더에는 ′template.dat′이 포함되어 있기 때문에, 이하의 URL에서 실행하고, 코드가 정상으로 동작하고 있음을 확인하세요.http://local host:8080/CZ_MailTransfer/sample.jspJavaMail JAF는 다운로드 파일에 이미 포함되어 있기 때문에 샘플을 그대로 이용할 경우에는 다시 설치할 필요가 없습니다.파일 구조 앞서 기술한 것처럼, 본고에서 소개하는 메일 통지 기능은 JSP1.2 & 서블릿 2.3 환경에서 동작하는 서블릿 클래스입니다.우선은 다운로드 파일내의 파일 구조를 나타내 둡니다(적자의 파일은, 다른 애플리케이션에서 이용하는 경우에 필요한 파일인 것을 나타냅니다).Mail Transfer 서블릿의 이용방법 Mail Transfer 서블릿에서는 그 동작을 다음 3곳에서 규정하고 있습니다.사용하기에 앞서 적절히 필요한 파라미터를 변경한 후 이용해 주십시오.디플로이먼트 디스크립터
Mail Transfer 서블릿은 초기화 파라미터로서 ′smtp′ 파라미터(메일송신시에 이용하는 SMTP 서버명)를 요구합니다.샘플에서는 더미의 서버명이 세팅되어 있기 때문에(굵은 글씨 부분), 사용시에는 적당, 이용 가능한 서버명으로 바꿔 주세요.
′web.xml′
< servlet >
< servlet - name > MailTransfer < / servlet - name >
< servlet - class > to . msn . wings . codezine . MailTransfer
< / servlet - class >
< init - param >
smtp < / param - name >
′′ smtp.xxxxx.ne.jp ′′ < / param - value >
< / init - param >
< / servlet >
메일 본문의 템플릿
Mail Transfer서블릿은 메일발송시 미리 준비된 템플릿을 바탕으로 메일 본문을 생성합니다.템플릿에는 __파라미터명 ___ 형식으로 변수를 지정할 수 있는 특징이 있습니다.파라미터 이름 __는 클라이언트에서 송신된 포스트데이터의 내용에 따라 치환됩니다.
다음은 다운로드 파일에 포함되어 있는 샘플 템플릿입니다.템플릿은 반드시 어플리케이션 루트 바로 아래에 있는 /WEB-INF/data 폴더에 template.dat이라는 이름으로 배치를 하셔야 합니다.
「 template . dat 」
■■_name__님에게 메세지가 도착했습니다■■
----------------------------------------------------------------
메시지:
__ message __
----------------------------------------------------------------
JSP 페이지에서 송신되는 포스트 데이터
마지막으로, Mail Transfer 서블릿은, 메일 송신시에 필요한 정보를 JSP 페이지로부터의 포스트데이터를 통해서 받습니다.폼 요소명은 일반적인 HTML 의 규칙에 따라서만 있으면 자유롭게 명명할 수 있습니다만 유일하게 선두가 _(언더 스코어)로 시작되는 요소명은 Mail Transfer서블릿에서는 예약 요소로 간주되어 무시되므로 주의해 주십시오.덧붙여 이하에 Mail Transfer 서블릿으로 이용 가능한 예약 요소를 일람에 나타내 둡니다.
메일 Transfer 서블릿 예약 요소
요소명 개요
_to 이메일 보내기 수신인
_from 메일 주소
_fromArias메일의 발신자명
_subject 메일 제목
_location 메일 송신 후의 전이처 URL 이상의 규칙에 따라서, 기술한 「sample.jsp」는 이하와 같습니다.덧붙여
태그의 action 옵션은 고정치로 「Mail Transfer」(Mail Transfer 서블릿의 URL 패턴)로 할 필요가 있습니다(아래, 굵은 글씨 부분). 「sample.jsp」
< % @ page contentType = ′ text / html ; charset = Windows - 31J ′ % >
< form method = ′ POST ′ action = ′ ′′ MailTransfer ′′ ′ >
< input type = ′ hidden ′ name = ′ _ from ′ value = ′ CQW15204@nifty.com ′ / >
< input type = ′ hidden ′ name = ′ _ fromArias ′ value = ′ 山田 祥寛 ′ / >
< input type = ′ hidden ′ name = ′ _ location ′ value = ′ sample . jsp ′ / >
< input type = ′ hidden ′ name = ′ _ subject ′ value = ′ サンプル テスト ′ / >
送信 先名 : < input type = ′ text ′ name = ′ name ′ size = ′ 30 ′ / > < br / >
送信 先 アドレス : < input type = ′ text ′ name = ′ _ to ′ size = ′ 50 ′ / > < br / >
メッセージ : < input type = ′ text ′ name = ′ message ′ size = ′ 100 ′ / > < br / >
< input type = ′ submit ′ value = ′ メール 送信 ′ / >
덧붙여 본샘플에서는_to 파라미터를 숨겨 필드에서 지정하고 있습니다만, 숨겨진 필드는 악의 있는 제3자가 간단하게 개찬할 수 있습니다.실제로 이용할 때는, 송신 가능한 메일 주소를 미리 사용자에게 등록시켜, 서버측에서 존재 체크를 실시하는 등, 주소의 타당성 검증은 최소한 실시하도록 해 주세요.서블릿 클래스 Mail Transfer의 구조 서블릿 클래스 Mail Transfer의 사용법을 이해한 마당에, Mail Transfer 자체의 구조를 들여다 보도록 합시다.덧붙여 본고에서는 서블릿에 관한 기본적인 규칙에 대해서는 상술하지 않습니다.흥미가 있는 분은, 졸고 「기초로부터 배우는 서블릿/JSP(@IT)」등의 기사를 참조해 주세요.『MailTransfer.java』 『메일 전송』
부탁한다문자 인코딩 설정(′Windows-31′)J′);
SerbletConfig=this.getServletConfig();
서블릿 컨텍스트 응용프로그램=config.getServletContext();
// 必要なパラメータを設定した上で、メールセッションを確立
속성 objPrp = 새 속성();
objPrp.put(′mail.smtp.host′,config.getInitParameter(′smtp′);
objPrp.put(′mail.host′,config.getInitParameter(′smtp′);
세션 세션=Default.getDefault인스턴스(objPrp,null);
// メール本体を生成(宛先、送信元、件名、本文をセット)
MimeMessage msg=new MimeMessage(세션);
{}을(를) 시도하다
msg.setRecipients(메시지).수신인 유형.투, 투, 투, 투, 투, 투, 투, 투, 투, 투.
request.getParameter(′_to′);
인터넷 주소 objFrm= 새 인터넷 주소(
request.getParameter(′_from′, request.getParameter(′_fromArias′));
msg.setFrom(objFrm);
msg.setSubject(′_subject′,′ISO-2022-JP′);
// テンプレートファイルを読み込み、ポストデータと照合しながら
// メール本文を生成
StringBuffer body=newStringBuffer();
버퍼링된 판독기 템플릿=새 버퍼링된 판독기()
새 파일 판독기(application.getRealPath()
′/WEB-INF/data/template.dat′);
반면(template.ready()){body.append(template.readLine() + ′′);}
문자열 본체Text=body.toString();
열거형 objEnm= request.getParameterNames();
when(objEnm에 추가 요소()가 있음){
문자열 이름 =(String)objEnm.nextElement();
if(!name.startsWith(′_′){
몸통Text=bodyText.replaceAll(′_′ + 이름)
+ ′_′, request.getParameter(이름));
}
}
template.closefilen;
msg.setText(본문 텍스트),ISO-2022-JP′;
// メール送信を実行
Transport.send(msg);
// 処理後は指定されたページにリダイレクト
반응.sendRedirect(request.getParameter(′_location′));mailtransferに関する大まかな処理の流れは、コード中のコメントを読んでいただくとして、javamailでメール送信を行う場合に注意しなければならないのは、以下の2点です。mail.hostposmail.vmail.hostpossible
単にメールを送信するだけならば、mail.smtp.hostプロパティを指定するだけでもメールは正常に送信できます。しかし、mail.hostプロパティは内部的にmessage-idヘッダを利用するために利用されるパラメータ値です。mail.hostプロパティが省略された場合、message-idプロパティが正常に生成されませんので、注意してください。mail.host、mail.smtp.hostプロパティは原則として双方省略せずに送信するべきです。
マルチバイト文字を含む場合は「iso-2022-jp」で送信
件名やメール本文にマルチバイト文字を含む場合には、必ず文字エンコーディング名を明示的に指定する必要があります。メールで一般的に利用される文字エンコーディングは「iso-2022-jp」です。まとめ以上、htmlメールや添付ファイルにも対応したい」「複数人に同報配信したい」など、さまざまなニーズにも対応してみると面白そうです。관련 링크 @IT 『Java Solution 연재 기사 「기초부터 배우는 서블릿/JSP」」 야마다 요시히로 저
반응형