-
Notifications
You must be signed in to change notification settings - Fork 2
/
easyMail.go
56 lines (49 loc) · 952 Bytes
/
easyMail.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
package easyMail
import (
"net/smtp"
)
type MailServer struct {
Sender MailSender
Auth smtp.Auth
}
func (s *MailSender) getHost() string {
switch s.Provider {
case GMAIL:
return "smtp.gmail.com"
case YAHOO:
return "smtp.mail.yahoo.com"
case OUTLOOK:
return "smtp.live.com"
default:
return ""
}
}
func (s *MailSender) getAuth() smtp.Auth {
return smtp.PlainAuth("", s.Email, s.Password, s.getHost())
}
func NewMailServerFromSender(sender MailSender) *MailServer {
return &MailServer{
Sender: sender,
Auth: sender.getAuth(),
}
}
func NewMailServer(email, password, provider string) *MailServer {
return NewMailServerFromSender(MailSender{
Email: email,
Password: password,
Provider: provider,
})
}
func (s *MailServer) SendMail(mail *Mail) error {
b, err := mail.ToBytes()
if err != nil {
return err
}
return smtp.SendMail(
s.Sender.getHost()+":587",
s.Auth,
s.Sender.Email,
mail.To,
b,
)
}