● 개발목적
윈도우 폼을 제작하여 C#. NET 언어와 구글 GMail SMTP 서버를 이용해 이메일을 발송할 수 있는 프로그램을 제작한다.
● 참고
구글 인증 오류를 겪고 있는 사람들이라면 아래의 링크를 참고해 조치하기 바란다.
● 윈도우 폼 제작
위와 같이 폼 디자인을 진행한다.
① 요소 : Label
모양 → Text : 받는 사람
② 요소 : Label
모양 → Text : 회신 주소
③ 요소 : Label
모양 → Text : 제목
④ 요소 : TextBox
디자인 → Name : txtBox_to
⑤ 요소 : TextBox
디자인 → Name : txtBox_From
⑥ 요소 : TextBox
디자인 → Name : txtBox_Subject
⑦ 요소 : GroupBox
모양 → Text : 이메일 내용
⑧ 요소 : TextBox
동작 → MultiLine : True
디자인 → Name : txtBox_Mail
⑨ 요소 : Button
모양 → Text : 이메일 전송
디자인 → Name : btn_Send
⑩ 요소 : Button
모양 → Text : 이메일 종료
디자인 → Name : btn_Exit
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 System.Text;
코드 작성 블럭으로 진입해, 코드 최상단에 System.Net.Mail 과 System.Text를 using 한다. C# 에서 이메일을 사용하기 위한 라이브러리이기 떄문에 필수적으로 using 해주면 된다.
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 System.Text;
namespace SMTPEMail
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_Send_Click(object sender, EventArgs e)
{
MailMessage mail = new MailMessage();
mail.To.Add(txtBox_to.Text);
// txtBox_to에 입력된 이메일 받을 사람 텍스트를 불러옴
mail.From = new MailAddress(txtBox_From.Text);
// txtBox_From에 입력된 이메일을 회신받을 주소 텍스트를 불러옴
mail.Subject = txtBox_Subject.Text;
// txtBox_Subject에 입력된 이메일 제목 텍스트를 불러옴
mail.Body = txtBox_Mail.Text + "회신 받을 주소 : " + txtBox_From.Text;
// 이메일 전송 시에 txtBox_Mail에 입력된 텍스트와 회신 받을 주소 텍스트를 한번에 보냄
mail.IsBodyHtml = true;
// HTML 사용
mail.Priority = MailPriority.High;
// 메일 중요도 표시, 필요 없으면 없애도 됨
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
// 메일 발송 실패시 알려줌
mail.SubjectEncoding = Encoding.UTF8;
// 메일 제목 인코딩은 UTF-8
mail.BodyEncoding = Encoding.UTF8;
// 메일 내용 인코딩은 UTF-8
SmtpClient smtp = new SmtpClient();
// SmtpClient 사용을 위한 smtp 객체 생성
smtp.Host = "smtp.gmail.com";
// smtp 메일 서버 주소 입력
smtp.Port = 587;
// smtp 메일 포트 주소 입력
smtp.Timeout = 10000;
smtp.UseDefaultCredentials = true;
// 서버 기본 인증 이용
smtp.EnableSsl = true;
// smtp SSL 보안 설정
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
// 이메일을 네트워크를 통해 SMTP 서버로 전송
smtp.Credentials = new System.Net.NetworkCredential("구글아이디", "구글비밀번호");
// 사용자 아이디와 비밀번호
try
{
smtp.Send(mail);
// smtp 객체를 통해 mail 발송
mail.Dispose();
MessageBox.Show("전송완료", "전송 완료");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
// 메일 발송 실패시 오류 메시지 출력
}
}
private void btn_Exit_Click(object sender, EventArgs e)
{
Close();
}
}
}
이제 btn_Send_Click 버튼을 더블 클릭 해 메일 발송 시 기능 구현과, btn_Exit_Click 버튼을 통한 프로그램 종료 버튼 기능을 구현하면 된다.
참고로 필자는 구글 메일이 아닌 다음 메일로 시도했었지만 계속 실패했다. 올바른 명령어를 입력했음에도 불구하고 계속 접속 오류나 발송 오류, 시간 초과 (TimeOut) 오류가 나는 경우 다른 SMTP 메일 서비스 업체의 주소와 포트번호를 사용하는 것도 좋은 대안이 될 수 있겠다.
구글의 SMTP 주소는 smtp.gmail.com, 포트 번호는 587이다.
전체 코드블럭을 첨부하고, 모든 C# SMTP 이메일 발송 과정에 사용된 명령어의 설명을 주석으로 달아놓으니, 참고해서 학습하면 좋을 것 같다.
● 프로젝트 파일 다운로드
해당 프로젝트 파일 또한 첨부하니 다운로드하여 참고해도 좋을 것 같다. (미빌드 프로젝트 원본파일)
● 결과
정상적으로 이메일이 발송되는 것을 확인할 수 있다.
※ 보내는 사람 이메일 주소를 변경하는 방법은 구현하지 않았다. 요즘 이메일 시스템이 실제 발송 서버 도메인과 수신된 서버 도메인이 다를 경우 스팸처리하여 정상적인 메일 수신이 어렵기 때문이다.