● 개발목적
윈도우 폼을 제작하여 C#. NET 언어를 이용해, 회원가입시 진행하는 이메일 본인 인증 시스템을 간단하게 구현해 보도록 한다. 이를 토대로 회원가입 폼에 응용해 적용할 수 있다.
● 참고
C# 윈도우 폼을 통한 이메일 발송시스템을 조금 응용한 것인데, 구현 방법이 궁금한 사람은 위의 링크를 참고해서 조치하면 좋을 것 같다.
● 윈도우 폼 제작
Visual Studio
에서 새로운 프로젝트를 생성하고, Form1
을 위와 같이 디자인 한다.
요소 | 종류 | 속성 |
① | GroupBox | ㆍ모양 → Text : 이메일 인증 |
② | Label | ㆍ모양 → Text : 이메일 |
③ | Label | ㆍ모양 → Text : 인증번호 |
④ | TextBox | ㆍ디자인 → Name : txt_email |
⑤ | TextBox | ㆍ디자인 → Name : txt_emailchecknum |
⑥ | Button | ㆍ모양 → Text : btn_email |
⑦ | Button | ㆍ모양 → Text : btn_emailcheck |
● 코드 작성
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Mail; // 이메일 발송을 위한 using
using System.Net; // 네트워크 프로토콜 사용을 위한 using
코드 작성 블럭으로 진입해, 이메일 발송을 위한 System.Net.Mail
참조와 네트워크 프로토콜 사용을 위한 System.Net
참조를 using
해준다.
public static Random randomNum = new Random();
// 난수발생 객체 생성
public static int checkNum = randomNum.Next(10000000, 99999999);
// 난수는 8자리, 범위는 10,000,000 ~ 99,999,999 사이의 값
Form1 Class
내부에 난수 발생을 위한 객체 randomNum
과, 발생한 난수를 저장할 정수형 변수 checkNum
을 각각 하나씩 선언해 준다.
난수를 저장할 정수형 변수 checkNum
는 해당 폼 내의 모든 객체만 공통으로 공유하고 사용해야 할 값이기 때문에 정적 멤버변수 (static
)으로 선언했으니 참고 바란다.
private void btn_email_Click(object sender, EventArgs e)
{
string SystemMailId = "사용자 EMail 시스템 아이디"
string SystemMailPwd = "사용자 Email 시스템 비밀번호"
// Email 시스템 SMTP 연동을 위한 아이디와 비밀번호 지역변수 선언
MailMessage mail = new MailMessage();
// MailMessage 발송을 위한 mail 객체 생성
mail.To.Add(txt_email.Text);
// 이메일 받을 사람 주소 (txt_email에 입력된 인증할 이메일 주소를 불러옴)
mail.From = new MailAddress(System_emailID);
// 이메일 보낸 사람 주소 (지역변수 System_emailID 값)
mail.Subject = "회원가입 본인인증 이메일";
// 이메일 제목
mail.Body = checkNum.ToString();
// 이메일 내용 (멤버변수 checkNum 난수값을 string 형식으로 변환해 입력)
mail.IsBodyHtml = true;
// 이메일 HTML 사용
mail.Priority = MailPriority.High;
// 이메일 중요도 높음
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
// 이메일 전송 실패시 알림 발생
mail.SubjectEncoding = Encoding.UTF8;
mail.BodyEncoding = Encoding.UTF8;
// 이메일 제목과 내용의 인코딩 (UTF8로 지정)
SmtpClient smtp = new SmtpClient();
// SmtpCliet 이용을 위한 smtp 객체 생성
smtp.Host = "smtp.gmail.com";
// SMTP 이메일 서버 주소 입력
// (본 포스트 기준 : 구글)
smtp.Port = 587;
// SMTP 이메일 서버 포트번호 입력
smtp.Timeout = 10000;
smtp.UseDefaultCredentials = true;
// SMTP 서버 기본 인증 사용
smtp.EnableSsl = true;
// SMTP SSL 보안 이용
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
// SMTP 네트워크를 통해 이메일 발송
smtp.Credentials = new System.Net.NetworkCredential(SystemMailId, SystemMailPwd);
// SMTP 서버 접속을 위한 사용자 아이디와 비밀번호
// 위에서 선언한 지역변수 SystemMailId와 SystemMailPwd 사용
try
{
smtp.Send(mail);
// SMTP 객체를 통한 이메일 발송
smtp.Dispose();
// SMTP CLIENT 연결 해제
MessageBox.Show("인증번호 전송완료", "전송 완료");
// 전송 완료 메시지박스 출력
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
// 이메일 발송 실패시 오류내용 메시지박스 출력
}
}
btn_email
버튼을 더블 클릭 해, 이메일 제목과 이메일 내용 (멤버변수 checkNum
의 난수값)을 정해주고, 이메일 발송을 위한 SMTP 서버 연결 및 이베일 발송 기능을 구현하면 된다.
본 코드는 구글 메일 SMTP 서버 주소 및 포트번호 기준이니, 타 메일링 시스템을 이용하려는 사람들은 각 메일링 시스템에 맞는 SMTP 서버 주소와 포트 번호를 입력해 사용하면 되겠다.
private void btn_emailcheck_Click(object sender, EventArgs e)
{
if(txt_emailchecknum.Text == checkNum.ToString())
{
MessageBox.Show("이메일 인증이 완료되었습니다.", "인증 성공");
}
else
{
MessageBox.Show("인증 번호가 다릅니다.", "인증 실패");
}
}
다음으로는 btn_emailcheck
버튼을 더블 클릭한다. 이메일 인증을 하기 위한 간단한 if 조건문
으로, 사용자가 입력한 txt_emailchecknum
의 텍스트 값 (인증번호)과 본 프로그램에서 발생한 checkNum
난수값이 동일한지 확인한다.
● 전체 코드 및 프로젝트 다운로드
해당 프로젝트의 코드 전체를 첨부하니, 다운로드하여 참고하면 좋을 것 같다. 주석은 달려있지 않으니, 상세한 설명이 필요한 사람들은 본 포스트를 참고하는 것이 좋다.
해당 프로젝트의 미빌드 원본 파일이 필요한 사람들을 위해 프로젝트 파일 또한 첨부한다. 상기 압축되어 있는 프로젝트 파일을 내려받아, 폼과 코드를 참고하는 것도 좋은 방법이 될 수 있겠다.
● 결과
이메일 인증을 위해 난수값을 발생하고, 이를 전송하여 사용자에게 인증 번호가 정상적으로 전달된다. 그 후, 사용자가 올바르지 않은 값을 입력하면 오류 문구가 발생하고, 정상적인 값을 입력하면 인증 완료 문구가 출력되며 정상적으로 작동되는 모습을 확인할 수 있다.
『함께 읽으면 좋은 글』