본문으로 바로가기

CDO.Message SMTP 이메일 전송 (asp)

category [ Web 관련 ]/asp 2018. 10. 12. 17:59

시나리오

 

게임 종료시 유저가 스샷을 메일로 전송 받고 싶어 할 경우

이메일을 입력하고(게임상에서) 보내기를 하면

클라이언트가 서버에(이미 약속된) 스샷 파일을 저장하고, 유저 이메일과 저장한 파일 수 를 send_email.asp로 호출하면 해당 유저의 스샷 파일을 이메일로 전송한다.

전송 후 이미지는 삭제

 

 

<%@ CODEPAGE="65001" LANGUAGE="VBSCRIPT" %>

<%

Session.Codepage = "65001"

Response.Codepage="65001" 

Response.CharSet = "utf-8"

Response.Expires = -1   

Response.cacheControl = "no-cache"

Response.AddHeader "Pragma","no-cache"   

Response.ContentType="text/html;charset=utf-8" 

Response.Expiresabsolute = Now() - 1 

Response.AddHeader "cache-control","private" 

Server.ScriptTimeOut = 7200

%>   

 

<%

'실행 URL 샘플 : http://도메인/send_email.asp?toEmail=test@nate.com&fileCnt=100

'파일 저장 경로 : http://도메인/files

'저장시 파일명 형식 : 이메일주소_1.jpg, 이메일주소_2.jpg, 이메일주소_3.jpg .... 

 

'//파라미터

toEmail = trim(request("toEmail")) '//받는 사람 이메일

fileCnt = trim(request("fileCnt")) '//파일 갯 수

If fileCnt = "" Or fileCnt > 30 Then fileCnt = 30 '최대 30개

 

 

If toEmail = "" Or Instr(toEmail, "@") < 1 Then 

Response.Write "{""state"":false, ""msg"":""이메일 주소가 올바르지 않습니다""}"

Response.End 

End If 

 

 

'//기본 값

fromEmail = "Test<test@gmail.com>"

subject = "제목 입니다"

body = "내용 입니다"

 

 

 

Dim CDOMail, iConf

Set CDOMail = Server.CreateObject("CDO.Message") 

Set iConf = CDOMail.Configuration

With iConf.Fields

 

  '.item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1

  '.item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 

  '.item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "local"

  '.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "C:\Inetpub\mailroot\Pickup"

  '.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30

 

  .item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '1일 경우 로컬(SMTP), 2일 경우 외부(SMTP)로 메일전송

  .item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" '서버 주소

  .item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 'SMPT 포트

  .item("http://schemas.microsoft.com/cdo/configuration/smtpaccountname") = "Test" '계정 이름

  .item("http://schemas.microsoft.com/cdo/configuration/sendmailaddress") = fromEmail '보내는 메일

  .item("http://schemas.microsoft.com/cdo/configuration/smtpuserreplyemailaddress") = fromEmail '회신 이메일

  .item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdo basic

  .item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

  .item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "계정 아이디" '메일서버 계정 ID

  .item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "계정 패스워드" '메일서버 계정 비밀번호

 

  .Update

End With

 

 

CDOMail.From = fromEmail

CDOMail.To = toEmail

CDOMail.CC = "" '참조 이메일 주소

CDOMail.Subject = subject

CDOMail.HTMLBody = body

CDOMail.BodyPart.Charset="utf-8"

CDOMail.HTMLBodyPart.Charset="utf-8"

 

 

filePath = "/경로/files"  '//파일 저장 경로

 

Set fso = Server.CreateObject("Scripting.FileSystemObject") 

DirectoryPath = Server.mapPath(filePath & "/") & "\" & toEmail & "_"

 

 

'루프를 돌면서 파일경로가 있을경우 메일에 attach.

For i = 1 to fileCnt

  If (fso.FileExists(DirectoryPath & i & ".jpg") = True ) Then ' 같은 이름의 파일이 있을 때 

'Set iBp = CDOMail.AddAttachment("E:\경로\files\이메일주소_1.jpg")

'Set iBp = CDOMail.AddAttachment("http://도메인/경로/files/이메일주소_2.jpg")

Set iBp = CDOMail.AddAttachment(DirectoryPath & i & ".jpg") ' 파일 경로 예) c:\test.txt

iBp.ContentMediaType="application/octet-stream"

  End If

Next

 

 

'이메일 전송

CDOMail.send

 

'//전송한 파일 삭제

For i = 1 to fileCnt

  If (fso.FileExists(DirectoryPath & i & ".jpg") = True ) Then ' 같은 이름의 파일이 있을 때

fso.DeleteFile DirectoryPath & i & ".jpg"

  End If

Next

 

 

Response.Write "{""state"":true, ""msg"":""이메일이 전송되었습니다""}"

Response.End

 

%>

 

 

 

 

웹에서 폼으로 파일 받아서 전송할 경우는 아래 참조해서 재구성 해야함

 

<%@ CODEPAGE="65001" LANGUAGE="VBSCRIPT" %>

<%

Session.Codepage = "65001"

Response.Codepage="65001" 

Response.CharSet = "utf-8"

Response.Expires = -1   

Response.cacheControl = "no-cache"

Response.AddHeader "Pragma","no-cache"   

Response.ContentType="text/html;charset=utf-8" 

Response.Expiresabsolute = Now() - 1 

Response.AddHeader "cache-control","private" 

Server.ScriptTimeOut = 7200

%>     

 

<%

' ABC Upload Component 객체 생성

Set abcForm = Server.CreateObject("ABCUpload4.XForm")

 

 

Server.ScriptTimeout = 3600

 

 

abcForm.AbsolutePath = True

abcForm.Overwrite = False

abcForm.maxuploadsize = int(1024 * 1024 * 100) '(100M)

 

 

fromEmail = "보내는 사람 이메일"

toEmail = "받는사람 이메일"

subject = "제목 입니다"

body = "내용 입니다"

 

' ------------- 기존구문

Dim CDOMail, iConf

Set CDOMail = Server.CreateObject("CDO.Message") 

Set iConf = CDOMail.Configuration

With iConf.Fields

 

  '.item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1

  '.item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 

  '.item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "local"

  '.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "C:\Inetpub\mailroot\Pickup"

  '.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30

 

  .item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '1일 경우 로컬(SMTP), 2일 경우 외부(SMTP)로 메일전송

  .item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" '서버 주소

  .item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 'SMPT 포트

  .item("http://schemas.microsoft.com/cdo/configuration/smtpaccountname") = "Test" '계정 이름

  .item("http://schemas.microsoft.com/cdo/configuration/sendmailaddress") = fromEmail '보내는 메일

  .item("http://schemas.microsoft.com/cdo/configuration/smtpuserreplyemailaddress") = fromEmail '회신 이메일

  .item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdo basic

  .item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

  .item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "계정 아이디" '메일서버 계정 ID

  .item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "계정 패스워드" '메일서버 계정 비밀번호

 

  .Update

End With

 

 

 

CDOMail.From = fromEmail

CDOMail.To = toEmail

CDOMail.CC = "" '참조 이메일 주소

CDOMail.Subject = subject

CDOMail.HTMLBody = body

CDOMail.BodyPart.Charset="utf-8"

CDOMail.HTMLBodyPart.Charset="utf-8"

 

 

   If abcForm("file") <> "" Then

      rCnt = abcForm("file").count

   Else

      rCnt = 0

   End If

 

 

   Dim strFileName()

   Dim strFileSize()

   Dim strFileType()

   Dim strFileWholePath()

 

 

   Redim Preserve strFileName(rCnt)

   Redim Preserve strFileSize(rCnt)

   Redim Preserve strFileType(rCnt)

   Redim Preserve strFileWholePath(rCnt)

 

 

   '루프를 돌면서 파일경로가 있을경우 파일저장하고 attach.

   For i = 1 to rCnt

  set oFile = abcForm(trim("file"))(i)

 

  filename = oFile.SafeFileName

 

  '실제적인 파일 업로드를 처리하는 부분

  If oFile.FileExists Then 

strFileName(i) = oFile.SafeFileName

strFileSize(i) = oFile.Length

strFileType(i) = oFile.FileType

If oFile.Length > 1024 * 1024 * 50 Then

Response.Write "<script language=javascript>"

Response.Write "alert(""50M 이상의 사이즈인 파일은 업로드하 실 수 없습니다"");"

Response.Write "history.back();"

Response.Write "</script>"

Response.end

Else

strFileWholePath(i) = GetUniqueName(strFileName(i), strFileType(i), DirectoryPathMail, 0)

oFile.Save strFileWholePath(i)

End If

  End If

  '파일 업로드 처리 완료..

 

 

  ' 첨부파일 추가  

  If oFile.FileExists Then '첨부파일이 있을 경우

Set iBp = CDOMail.AddAttachment(strFileWholePath(i))

iBp.ContentMediaType="application/octet-stream"

  End If

   Next

 

 

' --- 기존구문

CDOMail.send

%>

 

 

참조

 

 

http://zeronica.tistory.com/18 

 

http://19park.tistory.com/4

https://m.blog.naver.com/PostView.nhn?blogId=shooter100&logNo=80156105974&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

 

 

gmail SMTP 정보

https://support.google.com/mail/answer/7126229?visit_id=636749258342388092-2200363241&hl=ko&rd=1

 

gmail 오류 발생시

https://forum.winhost.com/threads/sending-cdo-email-using-gmail.18710/