Go 언어 net/mail 알아보기

오늘은 Go 언어 기본 패키지에 포함되있는 net/mail로 메일을 파싱해보는 실습을 해보려 합니다.

package main

import (
	"fmt"
	"io/ioutil"
	"net/mail"
	"strings"
)

net/mail 패키지를 가져와서 메일 주소를 파싱하거나 메일 헤더를 분석할 수 있습니다.

func main() {
	adress, _ := mail.ParseAddress("example <example@example.com>")
	fmt.Println(adress.Name, adress.Address)

example라는 이메일 주소 소유자 이름이랑 example@example.com이라는 이메일 주소로 파싱할 수 있습니다.

	var addressList = "example1 <example@example.com>, example2 <example@example.com>"
	emails, _ := mail.ParseAddressList(addressList)
	for _, i := range emails {
		fmt.Println(i.Name, i.Address)
	}

여려 이메일 주소를 엮어놔도 AddressList로 만들어서 for range문으로 분리할 수 있습니다.

	msg := `Date: 2018-10-28
From: example <from@example.com>
To: minwook-shin <to@example.com>
Subject: test

Message body text
`

메일 본문을 만들어둡니다.

	reader := strings.NewReader(msg)
	message, _ := mail.ReadMessage(reader)
    header := message.Header

메일 메시지를 읽어들여서 헤더를 구분합니다.

	fmt.Println("Date:", header.Get("Date"))
	fmt.Println("From:", header.Get("From"))
	fmt.Println("To:", header.Get("To"))
	fmt.Println("Subject:", header.Get("Subject"))

Date, From, To, Subject를 가져와서 출력합니다.

	bodyText, _ := ioutil.ReadAll(message.Body)
	fmt.Printf("%s", bodyText)
}

메일 본문을 출력합니다.

Written on October 28, 2018