[C# 개발] 구글 SMTP 서버를 사용해 이메일 발송하기 (Using Google SMTP)

2022. 9. 26. 01:25·■ Dev. Language/C#
반응형

●  개발목적

윈도우 폼을 제작하여 C#. NET 언어와 구글 GMail SMTP 서버를 이용해 이메일을 발송할 수 있는 프로그램을 제작한다.


●  참고

구글 인증 오류를 겪고 있는 사람들이라면 아래의 링크를 참고해 조치하기 바란다.

 

[C#] SMTP를 사용하기 위한 구글 계정 보안 설정하기

● 개발목적 윈도우 폼을 제작하여 C#. NET 언어와 구글 GMail SMTP 서버를 이용해 이메일을 발송할 수 있는 프로그램을 제작하기 위한 일련의 과정을 거친다. ● 참고 구글 인증오류 때문에 많이 삽

acredev.tistory.com

 


●  윈도우 폼 제작

위와 같이 폼 디자인을 진행한다.

 

① 요소 : 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 이메일 발송 과정에 사용된 명령어의 설명을 주석으로 달아놓으니, 참고해서 학습하면 좋을 것 같다.

 


●  프로젝트 파일 다운로드

SMTPEMail.zip
0.04MB

해당 프로젝트 파일 또한 첨부하니 다운로드하여 참고해도 좋을 것 같다. (미빌드 프로젝트 원본파일)


●  결과

정상적으로 이메일이 발송되는 것을 확인할 수 있다.

 

※ 보내는 사람 이메일 주소를 변경하는 방법은 구현하지 않았다. 요즘 이메일 시스템이 실제 발송 서버 도메인과 수신된 서버 도메인이 다를 경우 스팸처리하여 정상적인 메일 수신이 어렵기 때문이다.

300x250
반응형
저작자표시 (새창열림)
'■ Dev. Language/C#' 카테고리의 다른 글
  • [Tip] C# MySQL, Visual Studio 사용 방법 및 연결 테스트 : NuGet Package를 통한 연동
  • [C# 개발] SMS 인증 번호를 발송해, 휴대폰 본인인증 확인하는 시스템 구현하기 (WinForm)
  • [C# 개발] 인증 번호를 발송해 이메일 본인인증 확인하는 시스템 구현하기
  • [C# 개발] MySQL DB 연동을 통해 간단한 로그인 및 회원가입 폼 만들기
Min Hyuk-Lee
Min Hyuk-Lee
시스템 엔지니어로 근무하고 있습니다.
  • Min Hyuk-Lee
    아크레의 개발로그
    Min Hyuk-Lee
    m_file@naver.com
  • 전체
    오늘
    어제
    • 📝 Log. (81)
      • ■ Dev. Language (11)
        • C (5)
        • C# (6)
      • ■ Dev. ETC (8)
        • Unity 3D (3)
        • Android Studio (JAVA) (5)
      • ■ Web (6)
        • HTML (3)
        • JSP (3)
      • ■ Linux (8)
        • Shell (2)
        • Linux Tip. (6)
        • 보안취약점 진단 (0)
      • ■ Windows (4)
        • Server (1)
        • Windows Tip. (3)
      • ■ VM (1)
        • VMWare (1)
        • Virtual Box (0)
      • ■ Database (9)
        • MySQL (7)
        • OracleDB (2)
      • ■ DevKit (5)
        • IDE (4)
        • Tool (1)
      • ■ Error (17)
        • Linux 오류해결 (4)
        • DB 오류해결 (3)
        • IDE 오류해결 (2)
        • VM 오류해결 (3)
        • Unity 오류해결 (4)
        • SSH, SFTP 오류해결 (1)
      • ■ Photoshop (3)
        • 디자인&이미지 창작 (3)
      • ■ Document (3)
        • MS Word (2)
        • PDF (1)
      • ■ Study (4)
        • Baekjoon (4)
      • ■ 작문 (1)
        • 회고 (1)
      • ■ ETC (1)
        • Car (0)
        • etc (1)
  • 🌐 Menu

    • 📓 Guestbook
  • 🔗 Other Links

    • GitHub
    • 아크레의 IT ISSUE
  • 📢 Notice

    • [스킨 업데이트] hELLO v4.10.0 적용완료
    • [스킨 업데이트] hELLO v4.9.0 적용 완료
    • [스킨 업데이트] hELLO v4.8.1 적용 완료
  • 💬 Recent Comments

  • hELLO· Designed By정상우.v4.10.0
Min Hyuk-Lee
[C# 개발] 구글 SMTP 서버를 사용해 이메일 발송하기 (Using Google SMTP)
상단으로

티스토리툴바