Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/adinapoli/mandrill

Pure Haskell client for the Mandrill JSON API
https://github.com/adinapoli/mandrill

Last synced: 23 days ago
JSON representation

Pure Haskell client for the Mandrill JSON API

Awesome Lists containing this project

README

        

[![Build Status](https://travis-ci.org/adinapoli/mandrill.svg?branch=master)](https://travis-ci.org/adinapoli/mandrill)
[![Coverage Status](https://img.shields.io/coveralls/adinapoli/mandrill.svg)](https://coveralls.io/r/adinapoli/mandrill)

# Haskell Client for the Mandrill JSON API

This module implement a low-level, 1:1 mapping API to
the [Mandrill](http://mandrillapp.com) transactional email service.

# Changelog
## Version 0.5.4.0

* Add `newTemplateMessage'` for sending message that uses a template whose sender address and subject are already configured in the Mandrill server.
* Set `mmsg_subject` and `mmsg_from_email` optional.

## Version 0.5.3.6

* Allow the package to work with base >= 4.11 (Courtesy of @basvandijk)
* Support building with LTS 13.29

## Version 0.5.3.5

* Replaced dependency on lens with microlens (Courtesy of @tom-bop)

## Version 0.5.3.3

* Relaxed upper bound on Aeson (see: fpco/stackage/issues/3337)

## Version 0.5.3.2

* Relaxed upper bound on Aeson (see: fpco/stackage/issues/2449)

## Version 0.5.3.1

* Relaxed upper bound on Aeson (see: fpco/stackage/issues/2177 )

## Version 0.5.3.0

* Added support for webhooks (thanks to @mwotton).

## Version 0.5.2.3

* Added support for aeson-1.0.0.0 by relaxing its upper bound.

## Version 0.5.2.2

* Added support for QuickCheck-2.9 by relaxing its upper bound.

## Version 0.5.2.1

* Added `Functor`, `Foldable` and `Traversable` instances to `MandrillResponse` (Courtesy of @dredozubov)

## Version 0.5.2.0

* Added inbound calls (Courtesy of @mwotton)

## Version 0.5.1.0

* Relaxed the constraint on `aeson` to allow `0.11.0.0`.

## Version 0.5.0.0

* Changed the `MandrillHeaders` type synonym from `Value` to `Object`.

* Changed the `mmsg_metadata` and `mmdt_values` fields from `MandrillVars` to `Object`.

* Changed the `mmsg_global_merge_vars` and `mmvr_vars` fields from `[MandrillVars]` to `[MergeVar]`

* Added the `MergeVar` data type:

```haskell
data MergeVar = MergeVar {
_mv_name :: !Text
, _mv_content :: Value
}
```

* Removed the `MandrillVars` type synonym.

## Version 0.4.0.0

* Modified the `Base64ByteString` type to accept another constructor. This
allows the user to pass already-encoded Base64 strings which might be coming
upstream.

# Example

This package was built with pragmatism and reuse in mind. This means
this API comes in two flavours: an IO-based and an handy monad transformer
which can be plugged in your stack of choice.
Example:

``` haskell
{-# LANGUAGE OverloadedStrings #-}
import Text.Email.Validate
import Network.API.Mandrill

main :: IO ()
main = do
case validate "[email protected]" of
Left err -> print $ "Invalid email!" ++ show err
Right addr -> runMandrill "MYTOKENHERE" $ do
let msg = "

My Html

"
res <- sendEmail (newTextMessage addr [addr] "Hello" msg)
case res of
MandrillSuccess k -> liftIO (print k)
MandrillFailure f -> liftIO (print f)
```

# Supported API versions

* 1.0 (partially)
- [Users call](https://mandrillapp.com/api/docs/users.JSON.html) - 100%
+ info.json
+ ~~ping.json~~ (as **doesn't return valid json!**)
+ ping2.json
+ senders.json

- [Messages call](https://mandrillapp.com/api/docs/messages.JSON.html)
+ send.json

- [Senders call](https://mandrillapp.com/api/docs/senders.JSON.html)
+ verify-domain.json

- [Inbound call](https://mandrillapp.com/api/docs/inbound.JSON.html)
+ add-route.json
+ add-domain.json

# Testing online API

To test the online API, first build the package with tests enabled:

```
cabal install --enable-tests
```

Then export an environment variable with your Mandrill **Test** token:

```
export MANDRILL_API_KEY="YOURKEYGOESHERE"
```

And finally execute the testsuite:

```
cabal test
```

# Contributions
This library scratches my own itches, but please fork away!
Pull requests are encouraged to implement the part of the API
you need.