Skip to content

An elegant MIME/SMTP email library with support for attachments

License

Notifications You must be signed in to change notification settings

darnmason/mailyak

Folders and files

NameName
Last commit message
Last commit date

Latest commit

101ece5 Β· Sep 18, 2020

History

68 Commits
Oct 22, 2019
Jun 23, 2016
Nov 7, 2018
Jun 23, 2016
Oct 22, 2019
Aug 14, 2020
Jun 27, 2019
Oct 22, 2019
Sep 7, 2020
Sep 18, 2020
Jul 26, 2018
Nov 7, 2018
Oct 22, 2019
May 21, 2017
Jul 26, 2018
Jul 26, 2018
Dec 12, 2018
Dec 12, 2018
May 21, 2017
Oct 22, 2019

Repository files navigation

Build Status GoDoc

An elegant MIME mail library with support for attachments




A simple, easy to use email library for Go (golang).
  • Full attachment support (attach anything that implements io.Reader)
  • Send to multiple addresses at the same time, including BCC addresses.
  • Supports composing multi-part messages (HTML and plain text emails for older clients)
  • Write templates directly to the email body (implements io.Writer for convenience)
  • Production ready - several million emails sent in a production environment
  • Comprehensive unit tests

Installation

go get -v github.com/domodwyer/mailyak

Usage

// Create a new email - specify the SMTP host and auth
mail := mailyak.New("mail.host.com:25", smtp.PlainAuth("", "user", "pass", "mail.host.com"))

mail.To("dom@itsallbroken.com")
mail.From("jsmith@example.com")
mail.FromName("Prince Fournineteen")

mail.Subject("Business proposition")

// mail.HTML() and mail.Plain() implement io.Writer, so you can do handy things like
// parse a template directly into the email body
if err := t.ExecuteTemplate(mail.HTML(), "htmlEmail", data); err != nil {
	panic(" πŸ’£ ")
}

// Or set the body using a string setter
mail.Plain().Set("Get a real email client")

// And you're done! 
if err := mail.Send(); err != nil {
	panic(" πŸ’£ ")
}

To send an attachment:

mail := mailyak.New("mail.host.com:25", smtp.PlainAuth("", "user", "pass", "mail.host.com"))

mail.To("dom@itsallbroken.com")
mail.From("oops@itsallbroken.com")
mail.Subject("I am a teapot")
mail.HTML().Set("Don't panic")

// input can be a bytes.Buffer, os.File, os.Stdin, etc.
// call multiple times to attach multiple files
mail.Attach("filename.txt", &input)

if err := mail.Send(); err != nil {
	panic(" πŸ’£ ")
}

Notes

  • Why "MailYak"? Because "MailyMcMailFace" is annoyingly long to type.
  • You can use a single instance of mailyak to send multiple emails after changing the to/body/whatever fields, avoiding unnecessary allocation/GC pressure.
  • Attachments are read when you call Send() to prevent holding onto multiple copies of the attachment in memory (source and email) - this means changing the attachment data between calling Attach() and Send() will change what's emailed out!
  • For your own sanity you should vendor this, and any other libraries when going into production.

About

An elegant MIME/SMTP email library with support for attachments

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%