12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package api
- import (
- "bytes"
- "crypto/tls"
- "errors"
- "html/template"
- gomail "gopkg.in/gomail.v2"
- )
- type Profile struct {
- Host string `json:"host" bson:"host"`
- Usuario string `json:"usuario" bson:"usuario"`
- Password string `json:"password" bson:"password"`
- Nome string `json:"nome" bson:"nome"`
- Porta int `json:"porta" bson:"porta"`
- }
- type Message struct {
- gomail.Message
- Template string
- Context interface{}
- }
- var (
- Serders = map[string]*Profile{}
- )
- func New() *Message {
- return &Message{Message: *gomail.NewMessage()}
- }
- func (t *Profile) GetFullNameAdrress() string {
- return t.Nome + " <" + t.Usuario + ">"
- }
- func RegisterSender(nome string, s *Profile) {
- Serders[nome] = s
- }
- func Sender(nome string) (*Profile, bool) {
- s, ok := Serders[nome]
- return s, ok
- }
- func Send(sender string, m *Message) error {
- var (
- s *Profile
- ok bool
- )
- if s, ok = Sender(sender); !ok {
- return errors.New("Perfil '" + sender + "' não exites")
- }
- dialer := gomail.NewDialer(s.Host, s.Porta, s.Usuario, s.Password)
- dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true}
- if err := m.parseTemplate(); err != nil {
- return err
- }
- return dialer.DialAndSend(&m.Message)
- }
- func (t *Message) Send(sender string) error {
- return Send(sender, t)
- }
- func (t *Message) SetTemplate(filename string, ctx interface{}) {
- t.Template = filename
- t.Context = ctx
- }
- func (m *Message) parseTemplate() (err error) {
- var (
- t *template.Template
- buf *bytes.Buffer
- )
- if m.Template == "" {
- return nil
- }
- if t, err = template.ParseFiles(m.Template); err != nil {
- return err
- }
- buf = new(bytes.Buffer)
- if err = t.Execute(buf, m.Context); err != nil {
- return err
- }
- m.SetBody("text/html", buf.String())
- return nil
- }
|