Go+GmailAPI로 서비스 계정에서 이메일 보내기
소개
GO에서 GmailAPI에서 이메일을 보내려고 할 때,
서비스 계정을 사용하려고하면 단번에 정보가 없어져 고전했기 때문에 메모
하고 싶은 일
좋은 것
이번 샘플 리포지토리
htps : // 기주 b. 코 m / 시로 33950 / 고센 dg 마이 l - mp ぇ
서비스 계정이란?
사용자가 조작하지 않고도 다양한 권한을 부여할 수 있는 계정
htps : // c ぉ d. 오, ぇ. 코 m/아 m/도 cs/세 rゔぃ세 아코응 ts? hl = 그럼
서비스 계정은 개별 최종 사용자가 아닌 애플리케이션 및 가상 머신(VM)에 속한 특수 Google 계정입니다.
애플리케이션은 서비스 계정을 사용하여 사용자 참여 없이 Google 서비스 API를 호출할 수 있습니다.
서비스 계정을 이용하면 다음과 같은 이점이 있습니다.
서비스 계정 생성
서비스 계정에 권한 위임
범위는 여기에 나열되어 있습니다.
키를 이용한 인증
방금 만든 JSON을 사용하여 인증
GmailAPI 패키지 에서는 4종류 정도 인증 방법이 기재되어 있지만,
이번에 하고 싶은 것은 어떤 방법도 잘 되지 않기 때문에, JWT를 이용한 인증을 한다
import (
"context"
"golang.org/x/oauth2/google"
"google.golang.org/api/gmail/v1"
"google.golang.org/api/option"
"io/ioutil"
"log"
)
func createService() (service *gmail.Service, err error) {
// サービスアカウント作成時にダウンロードしたJSONを読み込む
json, err := ioutil.ReadFile("./credential.json")
if err != nil {
log.Printf("[ERROR] Failed to process read file: %s", err)
return nil, err
}
// スコープはGSuiteで指定した物をそのまま記述する
config, err := google.JWTConfigFromJSON(json, gmail.MailGoogleComScope)
if err != nil {
log.Printf("[ERROR] Failed to process get jwt config: %s", err)
return nil, err
}
// 送信元のアドレスを指定
// 別のアドレスを指定すると実行時エラーになる
config.Subject = "[email protected]"
ctx := context.Background()
tokenSource := config.TokenSource(ctx)
return gmail.NewService(ctx, option.WithTokenSource(tokenSource))
}
이메일 보내기
import (
"encoding/base64"
"google.golang.org/api/gmail/v1"
"log"
"strings"
)
func sendMail() {
// サービス作成
service, err := createService()
if err != nil {
log.Printf("[ERROR] Failed to process create service: %s", err)
return
}
// 本文を作成
// FROMはSubjectに指定したアドレスか、そのアドレスが利用できるaliasを指定する
temp := []byte("From: [email protected]\r\n" +
"To: [email protected]\r\n" +
"Subject: testSubject\r\n" +
"\r\ntestBody")
var message gmail.Message
message.Raw = base64.StdEncoding.EncodeToString(temp)
message.Raw = strings.Replace(message.Raw, "/", "_", -1)
message.Raw = strings.Replace(message.Raw, "+", "-", -1)
message.Raw = strings.Replace(message.Raw, "=", "", -1)
// 送信
_, err = service.Users.Messages.Send("me", &message).Do()
if err != nil {
log.Printf("[ERROR] Failed to process send message: %s", err)
return
}
}
참고
htps : // 이 m / t하지만 3000 / ms / 3d210582bc7f1 또는 218cc
htps: //아이 c. 오 rg/오오 gぇ. 미안해. 오 rg/아피/g마이 l/v1
Reference
이 문제에 관하여(Go+GmailAPI로 서비스 계정에서 이메일 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/siro33950/items/7c129ffbd67d717d8646텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)