728x90
반응형
GO GET
사용할 라이브러리
go get github.com/aws/aws-sdk-go-v2/aws
go get github.com/aws/aws-sdk-go-v2/credentials
go get github.com/aws/aws-sdk-go-v2/service/ses
go get github.com/aws/aws-sdk-go-v2/service/ses/types
Session 연결
var key string = "KEY"
var secretKey string = "SECRET_KEY"
type Ses struct {
SesClient *ses.Client
}
func CreateSES() *Ses {
var SES *Ses
SES.SesClient = ses.New(ses.Options{
Region: "ap-northeast-2",
Credentials: credentials.NewStaticCredentialsProvider(key, secretKey, ""),
})
return SES
}
Template
- EmailTemplate : 이메일 본문을 미리 저장하여 메일 전송 시 {{tagname}}만 변경해서 메일을 보낼 수 있다.
- tag : 변경 가능한 값으로 대체 변수이며, {{}} 를 이용해서 지정한다. tag는 무제한
- 계정당 최대 10,000개 이메일 템플릿 생성해서 사용할 수 있다.
- SendBulkTemplatedEmail을 통해선 모든 받는 사용자를 포함하여 최대 50명에게 보낼 수 있다.
Create Template
func (s *Ses) CreateTemplate(templateName, htmlPart, subjectPart, textPart string) error {
_, err := s.SesClient.CreateTemplate(
context.TODO(),
&ses.CreateTemplateInput{Template: &types.Template{
TemplateName: aws.String(templateName),// 템플릿 이름을 지정한다. 템플릿 이름으로 기존 템플릿을 찾는다. ->
HtmlPart: aws.String(htmlPart), // 메일 본문으로 html형식
SubjectPart: aws.String(subjectPart), //메일 제목
TextPart: aws.String(textPart), // text 형식의 메일 본문
}})
return err
}
Get Template
func (s *Ses) GetTemplate(templateName string) (*types.Template, error) {
output, err := s.SesClient.GetTemplate(
context.TODO(),
&ses.GetTemplateInput{
TemplateName: aws.String(templateName), // 가져올 템플릿 이름
},
)
return output.Template, err
}
Delete Template
- 템플릿은 수정이 안 된다. -> Delete 후 Create , 이미 있는 템플릿 이름으로 Create 진행 시 이미 존재한다는 에러 발생
func (s *Ses) DeleteTemplate(templateName string) error {
_, err := s.SesClient.DeleteTemplate(
context.TODO(),
&ses.DeleteTemplateInput{
TemplateName: aws.String(templateName),
},
)
return err
}
Send mail
단일 대상에 메일 전송 with Template
func (s *Ses)SendTemplatedEmail(senderAddress, templateName string, receiverAddress []string, bccAddress []string, ccAddress []string, templateData map[string]any) error{
dataByte, err := json.Marshal(templateData)
if err != nil {
return err
}
_, err = s.SesClient.SendTemplatedEmail(
context.TODO(),
&ses.SendTemplatedEmailInput{
Source: aws.String(senderAddress),
Template: aws.String(templateName),
Destination: &types.Destination{
ToAddresses: receiverAddress, //받는 사람 메일 주소
BccAddresses: bccAddress,
CcAddresses: ccAddress,
},
TemplateData: aws.String(string(dataByte)), // 템플릿에 저장된 tag를 매칭 시켜줄 값으로, json 문자열 {tagname: value}
},
)
return err
}
여러 대상에 메일 전송 with Template
func (s *Ses) SendBulkTemplatedEmail(senderAddress, templateName string, destinations []types.BulkEmailDestination) {
s.SesClient.SendBulkTemplatedEmail(
context.TODO(),
&ses.SendBulkTemplatedEmailInput{
Source: aws.String(senderAddress),
Template: aws.String(templateName),
Destinations: destinations,
},
)
}
func SetDestination(receiverAddress []string, bccAddress []string, ccAddress []string, templateData map[string]any) (destination types.BulkEmailDestination, err error) {
dataByte, err := json.Marshal(templateData)
if err != nil {
return
}
//하나의 destination에 묶인 address들은 같은 emailTemplate의 replacementTemplateData를 가지게 된다 -> 같은 내용의 메일을 받는다.
destination = types.BulkEmailDestination{
Destination: &types.Destination{
ToAddresses: receiverAddress, //받는 사람 메일 주소
BccAddresses: bccAddress,
CcAddresses: ccAddress,
},
ReplacementTemplateData: aws.String(string(dataByte)),//대체 태그 (ex) {{tagname}}) 를 매칭 시켜줄 수 있는 데이터를 넣는다 ex) "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
}
return
}
Send Mail
func (s *Ses)SendMail (senderAddress, charset, subject, html, text string, receiverAddress []string, bccAddress []string, ccAddress []string){
s.SesClient.SendEmail(
context.TODO(),
&ses.SendEmailInput{
Source: aws.String(senderAddress),
Destination: &types.Destination{
ToAddresses: receiverAddress, // 받는 사람 메일 주소
BccAddresses: bccAddress,
CcAddresses: ccAddress,
},
Message: &types.Message{
Subject: &types.Content{
Charset: aws.String(charset),
Data: aws.String(subject), // 메일 제목
},
Body: &types.Body{
Html: &types.Content{ //Html 기반 본문
Charset: aws.String(charset),
Data: aws.String(html),
},
Text: &types.Content{ //Text 기반 본문
Charset: aws.String(charset),
Data: aws.String(text),
},
},
},
},
)
}
728x90
반응형
'서버 세팅 및 GIT' 카테고리의 다른 글
[SQL] MySQL Update 한 번에 하기 (1) | 2022.09.27 |
---|---|
ngrok으로 외부에서 로컬 서버 접속 (0) | 2022.08.05 |
[MySQL] 테이블 생성 및 권한 추가 (0) | 2022.03.05 |
kafka, mysql, redis 설치 방법 (0) | 2022.02.19 |
[AWS] ssh 접속 (0) | 2022.02.19 |