-
Golang에서 SMTP 로 mail 보내기 (gmail)Golang 2022. 9. 4. 18:24
App 사용을 위한 계정 생성하기
기존에는 google 로그인 시 사용하던 id / pwd로 mail을 보낼 수 있었지만 보안 정책이 변경되어 app 계정을 따로 생성해야 한다.
보안 탭으로 들어가기 앱 비밀번호 생성하기 앱 비밀번호 생성하기 이제 smtp 계정을 설정할 때 내 mail주소와 화면에 나온 app 비밀번호를 사용하면 된다.
code 작성
package gomail import ( "bytes" "encoding/json" "errors" "fmt" "html/template" "io/ioutil" "log" "net/smtp" "os" "path/filepath" ) func SendEmailSMTP(to []string, data interface{}, template string) (bool, error) { type credential struct { ID string `json:"id"` Password string `json:"password"` } pwd, _ := os.Getwd() b, err := ioutil.ReadFile(pwd + "/credentials.json") if err != nil { return false, errors.New("credentials.json file is not exist") } account := credential{} err = json.Unmarshal(b, &account) if err != nil { return false, errors.New("credentials.json file is not valid") } emailAuth := smtp.PlainAuth("", account.ID, account.Password, "smtp.gmail.com") emailBody, err := parseTemplate(template, data) if err != nil { log.Println(err.Error()) return false, errors.New("unable to parse email template") } subject := "Subject: Test email from Go!\n" mime := "MIME-version: 1.0;\nContent-Type: text/html; charset=\"UTF-8\";\n\n" msg := []byte(subject + mime + "\n" + emailBody) if err := smtp.SendMail("smtp.gmail.com:587", emailAuth, "cavea@cavea.kr", to, msg); err != nil { return false, err } return true, nil } func parseTemplate(templateFileName string, data interface{}) (string, error) { templatePath, err := filepath.Abs(fmt.Sprintf("email_templates/%s", templateFileName)) if err != nil { return "", errors.New("invalid template name") } t, err := template.ParseFiles(templatePath) if err != nil { return "", err } buf := new(bytes.Buffer) if err = t.Execute(buf, data); err != nil { return "", err } body := buf.String() return body, nil }
'Golang' 카테고리의 다른 글
Golang Gin API Swagger 붙이기 (0) 2022.12.16 Golang Server Base Code (graphQL, restAPI, mongoDB, postgresql) (0) 2022.04.22 Golang GraphQL 서버 #5 (타입 리졸버 추가하기) (0) 2022.03.22 Golang GraphQL 서버 #4 (커스텀 타입 매핑하기) (0) 2022.03.22 Golang Postgresql SQLC 설정하기 (0) 2022.03.21