@@ -0,0 +1,74 @@
|
||||
package email
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/ses"
|
||||
"github.com/pkg/errors"
|
||||
gomail "gopkg.in/gomail.v2"
|
||||
)
|
||||
|
||||
// Send sends email without attachments.
|
||||
func (c *EmailClient) Send(ctx context.Context, sender string, mailList []*string, title string, body string) error {
|
||||
if err := check(sender, mailList); err != nil {
|
||||
return err
|
||||
}
|
||||
sesEmailInput := &ses.SendEmailInput{
|
||||
Destination: &ses.Destination{
|
||||
ToAddresses: mailList,
|
||||
},
|
||||
Message: &ses.Message{
|
||||
Body: &ses.Body{
|
||||
Html: &ses.Content{
|
||||
Data: aws.String(body)},
|
||||
},
|
||||
Subject: &ses.Content{
|
||||
Data: aws.String(title),
|
||||
},
|
||||
},
|
||||
Source: aws.String(sender),
|
||||
}
|
||||
if _, err := c.ses.SendEmail(sesEmailInput); err != nil {
|
||||
return errors.Wrap(err, "send email failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SendRaw send email that supports attachments.
|
||||
func (c *EmailClient) SendRaw(ctx context.Context, sender string, mailList []*string, title string, body string, attachments []string) error {
|
||||
if err := check(sender, mailList); err != nil {
|
||||
return err
|
||||
}
|
||||
msg := gomail.NewMessage(gomail.SetCharset("UTF-8"))
|
||||
msg.SetHeader("From", sender)
|
||||
toList := make([]string, len(mailList))
|
||||
for i, l := range mailList {
|
||||
toList[i] = *l
|
||||
}
|
||||
msg.SetHeader("To", toList...)
|
||||
msg.SetHeader("Subject", title)
|
||||
msg.SetBody("text/html", body)
|
||||
for _, a := range attachments {
|
||||
msg.Attach(a)
|
||||
}
|
||||
var emailRaw bytes.Buffer
|
||||
_, _ = msg.WriteTo(&emailRaw)
|
||||
if _, err := c.ses.SendRawEmail(&ses.SendRawEmailInput{
|
||||
RawMessage: &ses.RawMessage{Data: emailRaw.Bytes()},
|
||||
}); err != nil {
|
||||
return errors.Wrap(err, "send raw email failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func check(sender string, mailList []*string) error {
|
||||
if sender == "" {
|
||||
return errors.New("no sender")
|
||||
}
|
||||
if len(mailList) == 0 {
|
||||
return errors.New("no recipient")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user