-
Notifications
You must be signed in to change notification settings - Fork 0
/
adapter_smtp.go
69 lines (58 loc) · 1.62 KB
/
adapter_smtp.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package email
import (
"github.com/google/uuid"
"gopkg.in/gomail.v2"
)
type SMTPConfig struct {
Host, Username, Password string
Port int
}
func NewSMTPConfig(host, username, password string, port int) SMTPConfig {
return SMTPConfig{
Host: host,
Username: username,
Password: password,
Port: port,
}
}
type smtpEmailService struct {
dialer *gomail.Dialer
sender Target
}
func NewSMTPEmailService(config SMTPConfig, sender Target) Service {
return &smtpEmailService{
dialer: gomail.NewDialer(config.Host, config.Port, config.Username, config.Password),
sender: sender,
}
}
func (svc *smtpEmailService) Send(subject string, target Target, cc, bcc *[]Target, message Message, attachments *[]Attachment) (string, error) {
messageID := uuid.New().String()
mailMessage := gomail.NewMessage()
mailMessage.SetHeader("Subject", subject)
mailMessage.SetHeader("From", svc.sender.String())
mailMessage.SetHeader("To", target.String())
if cc != nil {
for _, v := range *cc {
mailMessage.SetAddressHeader("Cc", v.Email, v.Name)
}
}
if bcc != nil {
for _, v := range *bcc {
mailMessage.SetAddressHeader("Bcc", v.Email, v.Name)
}
}
mailMessage.SetBody("text/plain", message.PlainText)
mailMessage.SetBody("text/html", message.HTML)
if attachments != nil {
for _, attachment := range *attachments {
mailMessage.Attach(attachment.Filepath, gomail.Rename(attachment.Filename))
}
}
if err := svc.dialer.DialAndSend(mailMessage); err != nil {
return "", err
}
return messageID, nil
}
func (svc *smtpEmailService) Status(messageID string) string {
panic("not implemented")
}