mime-mail-ses 0.0.0.5 → 0.1.0
raw patch · 2 files changed
+18/−21 lines, 2 filesdep +conduitdep +http-conduitdep +http-typesdep −http-enumeratorPVP ok
version bump matches the API change (PVP)
Dependencies added: conduit, http-conduit, http-types, transformers
Dependencies removed: http-enumerator
API changes (from Hackage documentation)
- Network.Mail.Mime.SES: SESException :: Response -> SESException
- Network.Mail.Mime.SES: data SESException
- Network.Mail.Mime.SES: instance Exception SESException
- Network.Mail.Mime.SES: instance Show SESException
- Network.Mail.Mime.SES: instance Typeable SESException
- Network.Mail.Mime.SES: renderSendMailSES :: SES -> Mail -> IO ()
+ Network.Mail.Mime.SES: renderSendMailSES :: ResourceIO m => Manager -> SES -> Mail -> ResourceT m ()
- Network.Mail.Mime.SES: sendMailSES :: SES -> ByteString -> IO ()
+ Network.Mail.Mime.SES: sendMailSES :: ResourceIO m => Manager -> SES -> ByteString -> ResourceT m ()
Files
- Network/Mail/Mime/SES.hs +13/−19
- mime-mail-ses.cabal +5/−2
Network/Mail/Mime/SES.hs view
@@ -1,16 +1,15 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE DeriveDataTypeable #-} module Network.Mail.Mime.SES ( sendMailSES , renderSendMailSES , SES (..)- , SESException (..) ) where import Data.ByteString (ByteString) import Network.Mail.Mime (Mail, renderMail') import qualified Data.ByteString.Lazy as L-import Network.HTTP.Enumerator+import Network.HTTP.Conduit (httpLbs, Manager, parseUrl, queryString, requestHeaders)+import Network.HTTP.Types (renderQuery) import Data.Time.Format (formatTime) import System.Locale (defaultTimeLocale) import Data.Time (getCurrentTime)@@ -19,9 +18,8 @@ import Crypto.Hash.SHA256 (SHA256) import Data.ByteString.Base64 (encode) import qualified Data.Serialize as S-import Control.Exception (Exception, throwIO)-import Data.Typeable (Typeable)-import Control.Monad (unless)+import Control.Monad.Trans.Resource (ResourceIO, ResourceT)+import Control.Monad.IO.Class (liftIO) data SES = SES { sesFrom :: ByteString@@ -30,15 +28,15 @@ , sesSecretKey :: ByteString } -renderSendMailSES :: SES -> Mail -> IO ()-renderSendMailSES ses mail = renderMail' mail >>= sendMailSES ses+renderSendMailSES :: ResourceIO m => Manager -> SES -> Mail -> ResourceT m ()+renderSendMailSES m ses mail = liftIO (renderMail' mail) >>= sendMailSES m ses -sendMailSES :: SES -> L.ByteString -> IO ()-sendMailSES ses msg = do- now <- getCurrentTime+sendMailSES :: ResourceIO m => Manager -> SES -> L.ByteString -> ResourceT m ()+sendMailSES manager ses msg = do+ now <- liftIO getCurrentTime let date = S8.pack $ format now sig = makeSig date $ sesSecretKey ses- req' <- parseUrl "https://email.us-east-1.amazonaws.com"+ req' <- liftIO $ parseUrl "https://email.us-east-1.amazonaws.com" let auth = S8.concat [ "AWS3-HTTPS AWSAccessKeyId=" , sesAccessKey ses@@ -46,14 +44,14 @@ , sig ] let req = req'- { queryString = qs+ { queryString = renderQuery False qs , requestHeaders = [ ("Date", date) , ("X-Amzn-Authorization", auth) ] }- res <- withManager $ httpLbs req- unless (statusCode res == 200) $ throwIO $ SESException res+ _ <- httpLbs req manager+ return () where qs = ("Action", Just "SendRawEmail")@@ -72,7 +70,3 @@ where x :: SHA256 x = undefined--data SESException = SESException Response- deriving (Show, Typeable)-instance Exception SESException
mime-mail-ses.cabal view
@@ -1,5 +1,5 @@ Name: mime-mail-ses-Version: 0.0.0.5+Version: 0.1.0 Synopsis: Send mime-mail messages via Amazon SES Homepage: http://github.com/snoyberg/mime-mail-ses License: BSD3@@ -20,6 +20,9 @@ , bytestring >= 0.9 && < 0.10 , time >= 1.1 , old-locale- , http-enumerator >= 0.6 && < 0.8+ , http-conduit >= 1.2 && < 1.3 , mime-mail >= 0.3 && < 0.5+ , conduit+ , transformers >= 0.2+ , http-types >= 0.6.8 && < 0.7 ghc-options: -Wall