module Aws.Ses.Commands.SendRawEmail ( SendRawEmail(..) , SendRawEmailResponse(..) ) where import Data.Text (Text) import Data.Typeable import Control.Applicative ((<$>)) import qualified Data.ByteString.Char8 as BS import Text.XML.Cursor (($//)) import qualified Data.Text.Encoding as T import Aws.Core import Aws.Ses.Core -- | Send a raw e-mail message. data SendRawEmail = SendRawEmail { srmDestinations :: [EmailAddress] , srmRawMessage :: RawMessage , srmSource :: Maybe Sender } deriving (Eq, Ord, Show, Typeable) -- | ServiceConfiguration: 'SesConfiguration' instance SignQuery SendRawEmail where type ServiceConfiguration SendRawEmail = SesConfiguration signQuery SendRawEmail {..} = sesSignQuery $ ("Action", "SendRawEmail") : concat [ destinations , sesAsQuery srmRawMessage , sesAsQuery srmSource ] where destinations = zip (enumMember <$> ([1..] :: [Int])) (T.encodeUtf8 <$> srmDestinations) enumMember = BS.append "Destinations.member." . BS.pack . show -- | The response sent back by Amazon SES after a -- 'SendRawEmail' command. data SendRawEmailResponse = SendRawEmailResponse { srmrMessageId :: Text } deriving (Eq, Ord, Show, Typeable) instance ResponseConsumer SendRawEmail SendRawEmailResponse where type ResponseMetadata SendRawEmailResponse = SesMetadata responseConsumer _ = sesResponseConsumer $ \cursor -> do messageId <- force "MessageId not found" $ cursor $// elContent "MessageId" return (SendRawEmailResponse messageId) instance Transaction SendRawEmail SendRawEmailResponse where instance AsMemoryResponse SendRawEmailResponse where type MemoryResponse SendRawEmailResponse = SendRawEmailResponse loadToMemory = return