github.com/bscott/buffalo@v0.11.1/mail/README.md (about) 1 # github.com/gobuffalo/buffalo/mail 2 3 This package is intended to allow easy Email sending with Buffalo, it allows you to define your custom `mail.Sender` for the provider you would like to use. 4 5 ## Generator 6 7 ```bash 8 $ buffalo generate mailer welcome_email 9 ``` 10 11 ## Example Usage 12 13 ```go 14 //actions/mail.go 15 package x 16 17 import ( 18 "log" 19 20 "github.com/gobuffalo/buffalo/render" 21 "github.com/gobuffalo/envy" 22 "github.com/gobuffalo/packr" 23 "github.com/gobuffalo/plush" 24 "github.com/gobuffalo/buffalo/mail" 25 "github.com/pkg/errors" 26 "gitlab.com/wawandco/app/models" 27 ) 28 29 var smtp mail.Sender 30 var r *render.Engine 31 32 func init() { 33 34 //Pulling config from the env. 35 port := envy.Get("SMTP_PORT", "1025") 36 host := envy.Get("SMTP_HOST", "localhost") 37 user := envy.Get("SMTP_USER", "") 38 password := envy.Get("SMTP_PASSWORD", "") 39 40 var err error 41 smtp, err = mail.NewSMTPSender(host, port, user, password) 42 43 if err != nil { 44 log.Fatal(err) 45 } 46 47 //The rendering engine, this is usually generated inside actions/render.go in your buffalo app. 48 r = render.New(render.Options{ 49 TemplatesBox: packr.NewBox("../templates"), 50 }) 51 } 52 53 //SendContactMessage Sends contact message to contact@myapp.com 54 func SendContactMessage(c *models.Contact) error { 55 56 //Creates a new message 57 m := mail.NewMessage() 58 m.From = "sender@myapp.com" 59 m.Subject = "New Contact" 60 m.To = []string{"contact@myapp.com"} 61 62 // Data that will be used inside the templates when rendering. 63 data := map[string]interface{}{ 64 "contact": c, 65 } 66 67 // You can add multiple bodies to the message you're creating to have content-types alternatives. 68 err := m.AddBodies(data, r.HTML("mail/contact.html"), r.Plain("mail/contact.txt")) 69 70 if err != nil { 71 return errors.WithStack(err) 72 } 73 74 err = smtp.Send(m) 75 if err != nil { 76 return errors.WithStack(err) 77 } 78 79 return nil 80 } 81 82 ``` 83 84 This `SendContactMessage` could be called by one of your actions, p.e. the action that handles your contact form submission. 85 86 ```go 87 //actions/contact.go 88 ... 89 90 func ContactFormHandler(c buffalo.Context) error { 91 contact := &models.Contact{} 92 c.Bind(contact) 93 94 //Calling to send the message 95 SendContactMessage(contact) 96 return c.Redirect(302, "contact/thanks") 97 } 98 ... 99 ``` 100 101 If you're using Gmail or need to configure your SMTP connection you can use the Dialer property on the SMTPSender, p.e: (for Gmail) 102 103 ```go 104 ... 105 var smtp mail.Sender 106 107 func init() { 108 port := envy.Get("SMTP_PORT", "465") 109 // or 587 with TLS 110 111 host := envy.Get("SMTP_HOST", "smtp.gmail.com") 112 user := envy.Get("SMTP_USER", "your@email.com") 113 password := envy.Get("SMTP_PASSWORD", "yourp4ssw0rd") 114 115 var err error 116 sender, err := mail.NewSMTPSender(host, port, user, password) 117 sender.Dialer.SSL = true 118 119 //or if TLS 120 sender.Dialer.TLSConfig = &tls.Config{...} 121 122 smtp = sender 123 } 124 ... 125 ```