module Network.API.Mandrill (
module M
, sendEmail
, sendTextEmail
, emptyMessage
, newTextMessage
, newHtmlMessage
, newTemplateMessage
, newTemplateMessage'
, liftIO
) where
import Control.Monad.Reader
import qualified Data.Aeson as JSON
import qualified Data.HashMap.Strict as H
import Data.Monoid
import qualified Data.Text as T
import Data.Time
import Network.API.Mandrill.Messages as M
import Network.API.Mandrill.Messages.Types as M
import Network.API.Mandrill.Trans as M
import Network.API.Mandrill.Types as M
import Text.Blaze.Html
import Text.Email.Validate
emptyMessage :: Maybe EmailAddress -> [EmailAddress] -> MandrillMessage
emptyMessage :: Maybe EmailAddress -> [EmailAddress] -> MandrillMessage
emptyMessage Maybe EmailAddress
f [EmailAddress]
t = MandrillMessage {
_mmsg_html :: MandrillHtml
_mmsg_html = forall a. Monoid a => a
mempty
, _mmsg_text :: Maybe Text
_mmsg_text = forall a. Maybe a
Nothing
, _mmsg_subject :: Maybe Text
_mmsg_subject = forall a. Maybe a
Nothing
, _mmsg_from_email :: Maybe MandrillEmail
_mmsg_from_email = EmailAddress -> MandrillEmail
MandrillEmail forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe EmailAddress
f
, _mmsg_from_name :: Maybe Text
_mmsg_from_name = forall a. Maybe a
Nothing
, _mmsg_to :: [MandrillRecipient]
_mmsg_to = forall a b. (a -> b) -> [a] -> [b]
map EmailAddress -> MandrillRecipient
newRecipient [EmailAddress]
t
, _mmsg_headers :: MandrillHeaders
_mmsg_headers = forall a. Monoid a => a
mempty
, _mmsg_important :: Maybe Bool
_mmsg_important = forall a. Maybe a
Nothing
, _mmsg_track_opens :: Maybe Bool
_mmsg_track_opens = forall a. Maybe a
Nothing
, _mmsg_track_clicks :: Maybe Bool
_mmsg_track_clicks = forall a. Maybe a
Nothing
, _mmsg_auto_text :: Maybe Bool
_mmsg_auto_text = forall a. Maybe a
Nothing
, _mmsg_auto_html :: Maybe Bool
_mmsg_auto_html = forall a. Maybe a
Nothing
, _mmsg_inline_css :: Maybe Bool
_mmsg_inline_css = forall a. Maybe a
Nothing
, _mmsg_url_strip_qs :: Maybe Bool
_mmsg_url_strip_qs = forall a. Maybe a
Nothing
, _mmsg_preserve_recipients :: Maybe Bool
_mmsg_preserve_recipients = forall a. Maybe a
Nothing
, _mmsg_view_content_link :: Maybe Bool
_mmsg_view_content_link = forall a. Maybe a
Nothing
, _mmsg_bcc_address :: Maybe Text
_mmsg_bcc_address = forall a. Maybe a
Nothing
, _mmsg_tracking_domain :: Maybe Text
_mmsg_tracking_domain = forall a. Maybe a
Nothing
, _mmsg_signing_domain :: Maybe Bool
_mmsg_signing_domain = forall a. Maybe a
Nothing
, _mmsg_return_path_domain :: Maybe Bool
_mmsg_return_path_domain = forall a. Maybe a
Nothing
, _mmsg_merge :: Maybe Bool
_mmsg_merge = forall a. Maybe a
Nothing
, _mmsg_global_merge_vars :: [MergeVar]
_mmsg_global_merge_vars = []
, _mmsg_merge_vars :: [MandrillMergeVars]
_mmsg_merge_vars = []
, _mmsg_tags :: [Text]
_mmsg_tags = []
, _mmsg_subaccount :: Maybe Text
_mmsg_subaccount = forall a. Maybe a
Nothing
, _mmsg_google_analytics_domains :: [Text]
_mmsg_google_analytics_domains = []
, _mmsg_google_analytics_campaign :: Maybe Text
_mmsg_google_analytics_campaign = forall a. Maybe a
Nothing
, _mmsg_metadata :: MandrillHeaders
_mmsg_metadata = forall a. Monoid a => a
mempty
, _mmsg_recipient_metadata :: [MandrillMetadata]
_mmsg_recipient_metadata = []
, _mmsg_attachments :: [MandrillWebContent]
_mmsg_attachments = []
, _mmsg_images :: [MandrillWebContent]
_mmsg_images = []
}
newHtmlMessage :: EmailAddress
-> [EmailAddress]
-> T.Text
-> Html
-> MandrillMessage
newHtmlMessage :: EmailAddress -> [EmailAddress] -> Text -> Html -> MandrillMessage
newHtmlMessage EmailAddress
f [EmailAddress]
t Text
subj Html
html = let body :: MandrillHtml
body = Html -> MandrillHtml
mkMandrillHtml Html
html in
(Maybe EmailAddress -> [EmailAddress] -> MandrillMessage
emptyMessage (forall a. a -> Maybe a
Just EmailAddress
f) [EmailAddress]
t) { _mmsg_html :: MandrillHtml
_mmsg_html = MandrillHtml
body, _mmsg_subject :: Maybe Text
_mmsg_subject = forall a. a -> Maybe a
Just Text
subj }
newTemplateMessage :: EmailAddress
-> [EmailAddress]
-> T.Text
-> MandrillMessage
newTemplateMessage :: EmailAddress -> [EmailAddress] -> Text -> MandrillMessage
newTemplateMessage EmailAddress
f [EmailAddress]
t Text
subj = (Maybe EmailAddress -> [EmailAddress] -> MandrillMessage
emptyMessage (forall a. a -> Maybe a
Just EmailAddress
f) [EmailAddress]
t) { _mmsg_subject :: Maybe Text
_mmsg_subject = forall a. a -> Maybe a
Just Text
subj }
newTemplateMessage' :: [EmailAddress]
-> MandrillMessage
newTemplateMessage' :: [EmailAddress] -> MandrillMessage
newTemplateMessage' = Maybe EmailAddress -> [EmailAddress] -> MandrillMessage
emptyMessage forall a. Maybe a
Nothing
newTextMessage :: EmailAddress
-> [EmailAddress]
-> T.Text
-> T.Text
-> MandrillMessage
newTextMessage :: EmailAddress -> [EmailAddress] -> Text -> Text -> MandrillMessage
newTextMessage EmailAddress
f [EmailAddress]
t Text
subj Text
txt = let body :: MandrillHtml
body = Text -> MandrillHtml
unsafeMkMandrillHtml Text
txt in
(Maybe EmailAddress -> [EmailAddress] -> MandrillMessage
emptyMessage (forall a. a -> Maybe a
Just EmailAddress
f) [EmailAddress]
t) {
_mmsg_html :: MandrillHtml
_mmsg_html = MandrillHtml
body
, _mmsg_text :: Maybe Text
_mmsg_text = forall a. a -> Maybe a
Just Text
txt
, _mmsg_subject :: Maybe Text
_mmsg_subject = forall a. a -> Maybe a
Just Text
subj
}
sendEmail :: MonadIO m
=> MandrillMessage
-> MandrillT m (MandrillResponse [MessagesResponse])
sendEmail :: forall (m :: * -> *).
MonadIO m =>
MandrillMessage
-> MandrillT m (MandrillResponse [MessagesResponse])
sendEmail MandrillMessage
msg = do
(Text
key, Manager
mgr) <- forall r (m :: * -> *). MonadReader r m => m r
ask
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Text
-> MandrillMessage
-> Maybe Bool
-> Maybe Text
-> Maybe UTCTime
-> Maybe Manager
-> IO (MandrillResponse [MessagesResponse])
send Text
key MandrillMessage
msg (forall a. a -> Maybe a
Just Bool
True) forall a. Maybe a
Nothing forall a. Maybe a
Nothing (forall a. a -> Maybe a
Just Manager
mgr)
sendTextEmail :: MonadIO m
=> MandrillMessage
-> MandrillT m (MandrillResponse [MessagesResponse])
sendTextEmail :: forall (m :: * -> *).
MonadIO m =>
MandrillMessage
-> MandrillT m (MandrillResponse [MessagesResponse])
sendTextEmail MandrillMessage
msg = do
(Text
key, Manager
mgr) <- forall r (m :: * -> *). MonadReader r m => m r
ask
UTCTime
now <- forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Text
-> MandrillMessage
-> Maybe Bool
-> Maybe Text
-> Maybe UTCTime
-> Maybe Manager
-> IO (MandrillResponse [MessagesResponse])
send Text
key MandrillMessage
msg (forall a. a -> Maybe a
Just Bool
True) forall a. Maybe a
Nothing (forall a. a -> Maybe a
Just UTCTime
now) (forall a. a -> Maybe a
Just Manager
mgr)