Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/domodwyer/mailyak
An elegant MIME/SMTP email library with support for attachments
https://github.com/domodwyer/mailyak
attachment email go golang mime smtp
Last synced: 4 days ago
JSON representation
An elegant MIME/SMTP email library with support for attachments
- Host: GitHub
- URL: https://github.com/domodwyer/mailyak
- Owner: domodwyer
- License: mit
- Created: 2016-06-23T17:10:28.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-11-01T18:23:52.000Z (about 1 year ago)
- Last Synced: 2024-10-01T16:39:58.489Z (about 1 month ago)
- Topics: attachment, email, go, golang, mime, smtp
- Language: Go
- Homepage:
- Size: 158 KB
- Stars: 335
- Watchers: 14
- Forks: 75
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred-test - domodwyer/mailyak - An elegant MIME/SMTP email library with support for attachments (Go)
README
[![Build
Status](https://travis-ci.org/domodwyer/mailyak.svg?branch=master)](https://travis-ci.org/domodwyer/mailyak)
[![GoDoc](https://godoc.org/github.com/domodwyer/mailyak?status.svg)](https://godoc.org/github.com/domodwyer/mailyak)
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
- SMTP over TLS support, with automatic STARTTLS upgrades for plaintext
connections# Installation
If you're using `go mod`:
```bash
go get -v github.com/domodwyer/mailyak/v3
```Or with `GOPATH`:
```bash
go get -v github.com/domodwyer/mailyak
```# Usage
```Go
// Create a new email - specify the SMTP host:port and auth (if needed)
mail := mailyak.New("mail.host.com:25", smtp.PlainAuth("", "user", "pass", "mail.host.com"))mail.To("[email protected]")
mail.From("[email protected]")
mail.FromName("Bananas for Friends")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:
```Go
mail := mailyak.New("mail.host.com:25", smtp.PlainAuth("", "user", "pass", "mail.host.com"))mail.To("[email protected]")
mail.From("[email protected]")
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.### Maintenance Status
This library is fully maintained.
The (relatively) small API/scope and many years spent maturing means it doesn't
receive frequent code changes any more. Bug fixes are definitely accepted (and
appreciated!), and you can consider this a stable and maintained library.