Huny's Dev Blog

[Zoho mail] domain-based email address로 smtp 연동하기

Hun Jang
Hun JangApr 6, 2024software
2 min read|
[Zoho mail] domain-based email address로 smtp 연동하기

Zoho mail은 도메인 소유자가 사용할 수 있는 이메일 호스팅 서비스이다. 이 서비스는 비즈니스 이메일 뿐만 아니라 개인 이메일 사용에도 적합하다. 필자는 Google Domains에서 개인 용도로 도메인을 구매하고 Google Workspace와 연동하여 이메일 서비스도 함께 사용하고 있었다. 그러나 2023년 Google Domains에서 도메인 서비스를 종료하고 도메인 사업을 Squarespace로 매각한다는 발표가 나게된다.

도메인 서비스 종료로 더 이상 Google workspace도 사용할 수 없게 되어 보유하고 있던 도메인을 다른 업체로 이전해야만 했다. Squarespace로 도메인을 이전하여 그대로 사용해도 됐지만 생소한 업체명과 여러가지로 한국 유저에게 적합하지 않아 보여서 도메인을 Cloudflare로 이전하게 되었다.

도메인 이전 후 도메인 관리부터 기능들이 Google domains에 있을 때보다 다양했지만 Cloudflare에서는 이메일 호스팅 서비스를 지원하지 않아 다른 대안을 찾아보았다.

MS Exchange, Zoho 등 다양한 선택지가 있었지만 가격 면에서 Zoho가 가장 합리적이라고 판단했고 이메일 호스팅 뿐만 아니라 다양한 기능을 제공하고 이를 대부분 사용할 수 있었기 때문에 바로 1년 결제를 진행하게 되었다.

개인 프로젝트를 개발하면서 이메일 보내기 기능을 사용할 일이 많기에 곧바로 SMTP 연동을 하게 되었고, 도메인 소유자가 Zoho에서 도메인 기반의 이메일 호스팅 서비스를 사용할 때 SMTP를 연동할 때 필요한 사항과 주의할 점에 대해서 정리하였다.

SMTP 구성 확인

Zoho mail 관리콘솔로 이동한 후, [메일 설정] > [도구 및 구성] 메뉴를 선택한다.

구성에서 IMAP, POP, SMTP에 대한 정보를 확인할 수 있다. 도메인 기반의 이메일 호스팅 서비스를 사용하는 경우 IMAP, POP, SMTP에서는 ~pro.zoho.com과 같이 “pro” 접미사가 붙는다. 따라서 SMTP 호스트 주소 설정 시 pro가 누락되지 않도록 smtppro.zoho.com 주소를 사용한다.

앱 암호 설정

Zoho mail에서는 다양한 다중 인증(MFA: Multi-Factor Authentication) 기능을 제공한다. 하나라도 다중 인증을 설정하는 경우 SMTP에서는 다중 인증을 진행할 방법이 없으므로 앱 암호를 별도로 생성하여 SMTP 인증에 사용할 수 있다.

Zoho mail 내 계정으로 이동한 후, [보안] > [앱 암호] 메뉴를 선택한다. 새 암호 생성을 선택하면 앱 이름 입력 창이 나타난다. 앱 이름은 SMTP라고 입력한다.

💡
앱 이름은 SMTP 를 사용하는데 영향을 주지 않는다. 앱 이름은 레이블 역할이므로 본인이 이해하기 쉽게 입력하면 된다. 만약 유출 문제가 발생했다면 해당 암호만 삭제할 수 있다.

생성을 선택하면 아래와 같이 암호가 생성되며, 닫기를 누르면 다시는 암호를 볼 수 없으므로 따로 암호를 기록해두지 않았다면 새로운 암호를 다시 생성해야 한다.

SMTP 연동, 이메일 보내기

생성된 앱 암호를 사용하여 SMTP 인증 후 이메일 보내기 기능을 구현할 수 있다.

package main

import "net/smtp"

func main() {
	/*
		보내는 메일 서버 이름
		smtppro.zoho.com
		포트
		465(SSL) 또는 587(TLS)
		인증 필요
	*/
	host := "smtppro.zoho.com"
	port := "587"
	sender := "<email address>"
	password := "<app password>"
	recipient := "jang@huny.dev"

	subject := "Subject: Test Email\n"
	body := "Test Email Body"

	message := []byte(subject + "\n" + body)

	auth := smtp.PlainAuth("", sender, password, host)

	err := smtp.SendMail(host+":"+port, auth, sender, []string{recipient}, message)
	if err != nil {
		panic(err)
	}
}
go

아래와 같이 SMTP로 이메일을 전송하였고, 사서함에서 이메일을 정상적으로 수신하였다.

Subscribe to our newsletter

Get the latest news and updates from our team