This project aims to provide a common api for popular email providers. It currently supports Mailgun & Sendgrid
Mailer alternatives and similar shards
Based on the "Email" category.
Alternatively, view Mailer alternatives based on common mentions on social networks and blogs.
Do you think we are missing an alternative of Mailer or a related project?
This project aims to provide a common api for popular email providers. It currently supports
I also plan to add a wrapper for SMTP
Add this to your application's
dependencies: mailer: github: crisward/mailer
require "mailer" Mailer.config(provider: Mailer::Mailgun.new(key: ENV["MAILGUN_KEY"], domain: ENV["MAILGUN_DOMAIN"])) email = Mailer::Message.new email.to("[email protected]","their_name") email.from = "[email protected]" email.subject = "Hello" email.text = "Some plain text messaeg" email.html = "<p>Some html message <img src='cid:logo.jpg'></p>" email.attachment = Mailer::Attachment.new(filename: "test.pdf" , path: "./spec/test.pdf") email.inline = Mailer::Attachment.new(filename: "logo.jpg" , path: "./spec/test.png") email.send
To use sendgrid, swap the first line to
Mailer.config(provider: Mailer::Sendgrid.new(key: "your sendgrid api key"))
Testing Your App
While testing your app, you probably won't want to send real emails. You can use the built in Mock provider for this.
# eg for kemal if ENV["KEMAL_ENV"]? != "test" Mailer.config(provider: Mailer::Mailgun.new(key: ENV["MAILGUN_KEY"], domain: ENV["MAILGUN_DOMAIN"])) else Mailer.config(provider:Mailer::Mock.new()) end
# mock crystal spec #mailgun MAILGUN_KEY="your-api-key" MAILGUN_DOMAIN="mailgun-domain" EMAIL="[email protected]" crystal spec #sendgrid SENDGRID_KEY="your-api-key" EMAIL="[email protected]" crystal spec
This library isn't full baked. It works, but there are some thing which need adding
- [ ] Error Handling
- [ ] Logging
- [ ] Adding SMTP option
- Fork it ( https://github.com/crisward/mailer/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
- Cris Ward - creator, maintainer