lang/asp

asp 폼메일 파일첨부

C/H 2007. 2. 1. 04:51
폼메일은 메일전용프로그램(웹메일/아웃룩)을 사용하지 않고 해당홈페이지에서 바로 FORM전송을 이용해 메일을 보내는 것을 말한다 이렇게 보내진 FORM전송은 서버에서 CDONTS와 같은 내장객체를 사용하여 SEND하게 된다

용도는 메일 뿐만 아니라 각종 문의/주문/AS/자동메일발송등에 쓰일 수 있다


자동메일사용예를 살펴보면......

1. 회원가입후 디비 저장하기 전이나 후에
2. 응답형게시판에서 관리자가 응답작성후
3. 물건을 주문한 경우 주문정보 입력후
4. 쇼핑몰에서 관리자가 배송처리한 경우
등등....

위와 같은 많은 경우에서 디비 처리를 하기 전 또는 후에 동일한 내용으로 조금의 노력만 보태면 메일도 보낼 수 있기 때문에 활용도는 매우 높다


여기서는 내장객체를 이용하여 폼메일을 보내는 방법을 알아본다

- SMTP서비스가 작동, IIS의 기본SMTP서버에서 가상서버/가상도메인을 준비
- 파일 첨부를 추가한다
- 첨부파일의 업로드는 ABCUPLOAD.DLL로 한다. --> ABCUPLOAD.DLL강의 참조
- 첨부를 저장할 폴더를 준비한다


페이지 구성은 다음과 같이 한다

전송페이지 send.asp
처리페이지 send_ok.asp

대략적인 작업순서를 보면 생각보다 간단하다

1. send.asp에서는 업로드가 가능하도록 form 속성에 multipart/form-data 속성을 추가한다


2. send_ok.asp에서는 abcupload.dll을 이용하여 전부 전송받는다
이때 첨부 파일이 있으면 특정 폴더에 저장하고 "경로"와 "파일이름"을 변수에 담아둔다


3. 객체를 생성하여 각종 프로퍼티에 파일외의 값을 대입하고 파일첨부 메소드에 "경로"와 "파일"을 대입하여 첨부시킨다
이후 FSO를 사용하여 파일을 삭제한다


4. 잘 갔다는 메시지를 보여주고 끝낸다


* 메일의 첨부파일은 일단 서버에 올려져야 첨부가 가능하다
혼자서 개발할 당시에는 클라이언트와 서버가 같기 때문에 업로드 없이 첨부가 되지만
물리적으로 떨어지면 서버의 객체는 파일을 찾을 수가 없게 된다. 따라서 꼭 먼저 업로드
가 이루어져야 한다.



********** SEND.ASP **********

<html>
<head><title>메일보내기</title>
<style type="text/css">
<!--
td { font-size: 9pt}
-->
</style>
</head>
<body>
<table bgcolor="#CBE4D6" border=0 cellpadding=5 cellspacing=1 align="center" width="430" height="100">
<tr align="center">
<td height="30" colspan="2"><b>다음과 같이 문의합니다.</b></td>
</tr>
<form name="mnform" method="POST" action="Send_ok.asp" enctype="multipart/form-data" >
<tr>
<td height="30" align="right" width="130" bgcolor="#FFFFFF">성명(Name)</td>
<td width="300" bgcolor="#FFFFFF">
<input type=TEXT size=30 name="name">
</td>
</tr>
<tr>
<td height="30" align="right" bgcolor="#FFFFFF">이메일(Email)</td>
<td bgcolor="#FFFFFF">
<input type=TEXT size=30 name="sender">
</td>
</tr>
<tr>
<td height="30" align="right" bgcolor="#FFFFFF">제목(Subject)</td>
<td bgcolor="#FFFFFF">
<input type=TEXT size=41 name="subject">
</td>
</tr>
<tr>
<td valign="top" align="right" bgcolor="#FFFFFF">내용(Message)</td>
<td align=LEFT bgcolor="#FFFFFF"><textarea name="body" cols=40 rows=8></textarea>
<br>
<input type=radio name="stype" value="1" checked>TEXT
<input type=radio name="stype" value="0">HTML
</td>
</tr>
<tr>
<td align=right height="30" bgcolor="#FFFFFF">첨부 파일</td>
<td align=LEFT bgcolor="#FFFFFF">
<input type=file size=25 name="sattach">
</td>
</tr>
<tr align="center">
<td height="50" colspan="2" bgcolor="#FFFFFF">
<input type=SUBMIT value=" SEND " name="SUBMIT" >
</td>
</tr>
</form>
</table>
</body>
</html>


********** SEND_OK.ASP **********

<%
'순서는....
' 1. abcupload컴포넌트를 사용하여 전송받는다
' 2. 전송된 파일이 있으면 저장한다
' 3. 메일컴포넌트를 사용하여 메일을 보낸다
' 4. 3에서 첨부파일이 있는 경우는 파일을 첨부한다
' 5. 첨부후 발송후 그 파일을 FSO를 사용하여 삭제한다
' 6. 적당한 메시지와 링크를 준비한다

'XFORM객체를 생성하고 전송받는다
Set theForm = Server.CreateObject("ABCUpload.XForm")

receiver="aaa@aaa.com" 'theForm(trim("receiver"))
'받을 사람주소가 달라질 수도 있을 때는 전송받도록 해야하고
'아니면 여기서 고정시켜 사용하면된다
sender=theForm(trim("sender")) '보내는 사람메일주소
name=theForm(trim("name"))
subject=theForm(trim("subject"))
body=theForm(trim("body"))
stype=theForm(trim("stype"))

'물리적 경로를 사용한다
theForm.AbsolutePath = True
'덮어쓰기를 허용하지 않는다
theForm.Overwrite = fasle

'XFIELD객체를 생성하고 업된 파일의 정보를 얻고 저장한다
Set theField = theForm(trim("sattach"))(1)

'업로드된 파일이 있으면 저장한다 (아래에 "UP"폴더를 만든다)
If theField.FileExists Then
spath=server.mappath(".") & "\UP\" '저장할 경로
fname=theField.RawFileName '파일이름
tpath=spath & fname '경로와 파일이름

theField.Save tpath '저장한다

end if

'Newmail객체를 생성한다
Set SMail = Server.CreateObject("CDONTS.Newmail")

'프로퍼티에 값을 할당하고 메소드를 실행한다

with SMail

.from = sender
.to = receiver
.subject = subject
.body = body
.bodyformat = stype
.mailformat = cdomailformatmime

'첨부가 있으면 첨부한다
if fname <> "" then
.Attachfile tpath,,1 'cdoEncodingBase64
end if

.Send

end with

'메일을 보낸 후 첨부화일이 있었다면 파일을 삭제한다

if fname <> "" then
Set FS=Server.CreateObject("Scripting.FileSystemObject")
FS.DeleteFile(tpath) 'FSO를 사용해서 파일을 삭제한다
end if

%>
<html>
<body>
<table width="500" border="0" cellspacing="0" cellpadding="0" height="300" align="center">
<tr>
<td align="center">Thanks for your contact! Have a nice day! <br><br>
감사합니다! 좋은 하루 되시기 바랍니다. <br><br>
--- dragoneye.co.kr ---
</td>
</tr>
</table>

</body>
</html>


출처 : http://blog.naver.com/elegy1?Redirect=Log&logNo=60005182790
반응형