[Go] Google Gmail SMTP 설정 방법 및 메일 전송

2021. 9. 15. 10:51Programming Language/Go

반응형

■ SMTP

간이 우편 전송 프로토콜(Simple Mail Transfer Protocol)의 약자. 이메일 전송에 사용되는 네트워크 프로토콜이다.

인터넷에서 메일 전송에 사용되는 표준이다. 1982년 RFC821에서 표준화되어 현재는 RFC5321에서 정의된 ESMTP(Extended SMTP; 확장 SMTP)로 2008년 갱신되었다. SMTP는 보안과 호환성의 문제로 그대로는 사용하지 않는 경우가 많다. 일반적으로 쓰이는 확장 프로그램은 SMTP-AUTH(송신자 인증 서비스), ESMTP(SASL을 이용한 보안 연결), MIME(non-ascii 데이터 전송 포맷)가 있다.

SMTP는 25/tcp와 587/tcp 포트를 사용하며 SMPTS는 465/tcp 포트를 사용한다.

출처 : 나무위키


■ Google Gmail SMTP 설정 방법

1. Gmail 설정 화면으로 이동

  • 설정(톱니바퀴 모양) 버튼 클릭
  • 모든 설정 보기 버튼 클릭

2. IMAP 엑세스 상태를 [IMAP 사용] 으로 수정

  • [전달 및 POP/IMAP] 탭으로 이동
  • IMAP 엑세스 상태를 [IMAP 사용] 으로 수정
  • 변경사항 저장 버튼 클릭

3. Google 계정 보안 설정 화면으로 이동

  • Google 계정 관리 화면으로 이동
  • [보안] 탭으로 이동
 

Google 계정

Google은 사용자마다 원하는 개인정보 보호 설정이 다르다는 사실을 인지하고 있습니다. 그래서 Google 계정에서는 사용이 간편한 컨트롤과 개인정보 보호 진단 같은 도구를 제공합니다. 이런 도구

www.google.com

4. Google에 로그인 [2단계 인증] 사용

  • [2단계 인증] 클릭

  • [시작하기] 버튼 클릭

  • 사용자의 전화번호 입력
  • 코드를 받을 방식 선택
  • [다음] 버튼 클릭

  • 인증코드 입력
  • [다음] 버튼 클릭

  • [사용] 버튼 클릭

5. Google에 로그인에 추가된 [앱 비밀번호] 생성

  • Google에 로그인 [앱 비밀번호] 클릭

  • 앱 선택에서 [기타(맞춤 이름)] 선택

  • 기기 이름을 사용자에 맞게 작성(*필자의 경우 GMAIL-SMTP)
  • [생성] 버튼 클릭

  • 자동 발급된 기기용 앱 비밀번호를 확인(* 비밀번호는 메일 발송시 필요하기 때문에 저장해둔다)
  • [확인] 버튼 클릭  


■ GO 언어에서 SMTP를 활용하여 메일 발송

  • 1 : 앱 비밀번호를 생성한 사용자의 이메일 주소
  • 2 : 앱 비밀번호
  • 3 : smtp.gmail.com [고정 값]
  • 4 : 발신자 주소
  • 5 : 수신자 주소 [복수 입력 가능]
  • 6 : 메일의 제목 
  • 7 : 메일의 형식을 지정할 수 있다. 예시로 html 본문을 발송하기 위해서 [Content-Type: text/html;\n] 로 설정하면 된다.
  • 8 : 메일의 본문
  • 9 : smtp.gmail.com:587 [고정 값]

소스 코드

func SendMail() {
	auth := smtp.PlainAuth("", "hyenmin@gmail.com", "fsdajklfdslak", "smtp.gmail.com")
	from := "hyenmin@gmail.com"
	to := []string{"hyenmin@gmail.com"} // 복수 수신자 가능

	// 메시지 작성
	headerSubject := "Subject: [제목] 메일 테스트 발송\r\n"
	headerBlank := "\r\n"
	body := "[본문] 메일 테스트 발송"
	msg := []byte(headerSubject + headerBlank + body)

	// 메일 보내기
	err := smtp.SendMail("smtp.gmail.com:587", auth, from, to, msg)
	if err != nil {
		log.Fatalln("Error")
		return
	}
	log.Fatalln("Success")
}
반응형