이번에 요청이 들어온 비대면 교육 사이트에서 회원가입대신 이메일 인증 기능을 사용한다고 한다.
회사 메일이 다음메일이므로 다음 SMTP 서버를 이용한 ASP에서 이메일 발송 방법을 정리해놓으려고 한다.
1. 우선, 다음 메일의 [환경설정] > [IMAP/POP3] 탭으로 들어간다.
IMAP/SMTP 사용을 '사용함'으로 변경한 후, SMTP서버명, 포트번호, 아이디, 비밀번호를 확인한다.
여기서, IMAP과 POP3는 이메일을 받을 때 사용하는 프로토콜이고, 나는 이메일을 보내는 기능이 필요하기 때문에 SMTP만 있으면 된다. 기본적으로 SMTP의 포트는 25번이지만 다음은 465번 포트를 사용한다.
2. 필요한 정보들을 확인했으면 telnet을 이용해 465번 포트가 제대로 열려있는지 확인한다.
나같은 경우 포트가 열려있지 않아서 아웃바운드 방화벽을 열어주고 회사 보안업체 설정에서도 포트를 열어주니 정상적으로 작동하는 것을 확인 할 수 있었다.
3. 이제 ASP에서 메일 발송 코드를 작성한다. 나는 인증번호 버튼을 클릭하면 AJAX로 이메일을 발송하도록 작업했다.
Dim mailcontents '메일 내용을 담을 객체
Dim iMsg,iConf
user_url = Request("user_url")
user_email = Trim(Request("user_email"))
'### 등록된 이메일인지 확인
sSql = " If Exists (Select user_email From mail_auth_tbl Where user_email ='"& user_email &"' ) Select 1 Else Select 0 "
flag = false
Call SQLInject( sSql )
Set Rs = dbh.ExecSQLReturnRS( sSql, Nothing, dbcon )
If Not Rs.Eof Then
cnt = Cint(Rs(0))
If cnt > 0 Then
data = "N"
Else
flag = true
End If
End If
Rs.Close
Set Rs = Nothing
If flag = true Then
randomize
'랜덤함수를 사용하기 위해 Randomize문은 수를 사용하여 Rnd 함수의 난수 발생기를 초기화하고 새 랜덤값을 뽑아낸다.
'randomize를 사용하지 않으면 매번 똑같은 랜덤 값을 뽑아낸다.
dim mailkey
mailkey = int((99999-10000)*rnd + 10000) '숫자5자리 인증코드
'메일 내용
'chr(10) 함수는 아스키 코드의 줄바꿈(\n) 문자열로 변형가능
mailcontents=mailcontents & chr(10) & " 인증코드입니다. [" & CStr(mailkey) & "]"
mailcontents=mailcontents & chr(10) & " 사이트에서 이메일과 인증코드를 정확히 입력해주세요."
Set iConf = Server.CreateObject("CDO.Configuration") '로컬이 아닌 원격지 메일 서버를 사용하여 메일을 발송하는 경우 개체 생성
With iConf.Fields
.item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '1일 경우 로컬(SMTP), 2일 경우 외부(SMTP) 원격지로 메일전송
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "C:\Inetpub\mailroot\Pickup" 'mailroot 폴더 권한 설정
.item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.daum.net" 'Host 설정 '메일서버 IP 또는 메일서버 URL
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30 '접속 시도할 제한 시간을 설정(30초)
.item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 'port번호
.item("http://schemas.microsoft.com/cdo/configuration/smtpaccountname") = "test@test.com" '계정이름'외부 smtp 이용시 사용
.item("http://schemas.microsoft.com/cdo/configuration/sendmailaddress") = "test@test.com"
.item("http://schemas.microsoft.com/cdo/configuration/smtpuserreplyemailaddress") = "test@test.com" '회신 메일 주소
.item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1 'ssl사용여부(ssl필수)
.item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdo basic
.item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "test" '메일서버 계정 ID
.item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "test1234" '메일서버 계정 비밀번호
.Update
End With
'CDO 메시지 개체 생성
Set iMsg = Server.CreateObject("CDO.Message") '메일 발송을 위해 개체 생성
iMsg.Configuration = iConf '로컬이 아닌 외부 smtp 메일 발송시 사용
Set iConf = Nothing
With iMsg
'.BodyPart.Charset = "ks_c_5601-1987" '한글설정
.To = user_email '받는 사람 메일 주소
.From = "test@test.com" '발송 메일 주소
.Subject = "[TEST] 인증코드 안내입니다."
.HtmlBody = mailcontents 'HtmlBody나 TextBody 둘중 하나 무조건 사용하기
'.CC = "test@test.com" ' 참조 메일주소
'.Bcc = "test@test.com" ' 숨은 참조 메일주소
'.Bcc = "c:/user/desktop/test.jpg" '첨부파일, 절대경로로 지정
.Send '실제 메일 발송 코드
End With
Set iMsg = Nothing '메일 발송 개체 비활성화
sSql = ""
sSql = " INSERT INTO mail_auth_tbl (user_url, user_email, user_authcode) VALUES ( '"& user_url &"', '"& user_email &"', '"& mailkey &"' ) "
Call SQLInject( sSql )
dbh.ExecSQL sSql, Nothing, dbcon
dbh.Dispose
Set dbh = Nothing
data = "Y"
End If
4. 내가 사용하는 네이버 메일로 발송 테스트를 진행해보았다. 다음 SMTP를 통해 네이버로 메일이 잘 도착한 것을 확인할 수 있다.
'WEB > classic ASP' 카테고리의 다른 글
[ASP] MSSQL - SCOPE_IDENTITY() 사용하기 (0) | 2022.08.23 |
---|---|
[ASP] 배열 형태로 데이터 Request 받기 (0) | 2022.05.22 |
[ASP] ajax Form 전송하기 (0) | 2022.05.20 |
[ASP] Html 태그 제거하기 - 게시판 미리보기 (0) | 2022.05.12 |
댓글