diff options
author | Joris | 2018-06-17 23:24:47 +0200 |
---|---|---|
committer | Joris | 2018-06-18 11:13:55 +0200 |
commit | 0a4d3c8f12dc5797a919a00b6bcaf759947687cc (patch) | |
tree | bcb89781e22c2314bf0c064ebb37cb7f8a362f5c /src/executable/haskell/Service/MailService.hs | |
parent | e2a5c7c5c596d057b6fa9c08a8204ce1429cfdc4 (diff) | |
download | ad-listener-0a4d3c8f12dc5797a919a00b6bcaf759947687cc.tar.gz ad-listener-0a4d3c8f12dc5797a919a00b6bcaf759947687cc.tar.bz2 ad-listener-0a4d3c8f12dc5797a919a00b6bcaf759947687cc.zip |
Add ouest france parser
Diffstat (limited to 'src/executable/haskell/Service/MailService.hs')
-rw-r--r-- | src/executable/haskell/Service/MailService.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/executable/haskell/Service/MailService.hs b/src/executable/haskell/Service/MailService.hs new file mode 100644 index 0000000..f6d9542 --- /dev/null +++ b/src/executable/haskell/Service/MailService.hs @@ -0,0 +1,46 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Service.MailService + ( send + ) where + +import Control.Arrow (left) +import Control.Exception (SomeException, try) +import Data.Either (isLeft) +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.Lazy as LT +import Data.Text.Lazy.Builder (fromText, toLazyText) +import qualified Network.Mail.Mime as Mime + +import Model.Mail (Mail) +import qualified Model.Mail as Mail + +send :: Mail -> IO (Either Text ()) +send mail = do + result <- left (T.pack . show) <$> (try (Mime.renderSendMail . getMimeMail $ mail) :: IO (Either SomeException ())) + if isLeft result + then putStrLn ("Error sending the following email:" ++ (show mail)) + else return () + return result + +getMimeMail :: Mail -> Mime.Mail +getMimeMail mail = + let fromMail = Mime.emptyMail . address . Mail.from $ mail + in fromMail + { Mime.mailTo = map address . Mail.to $ mail + , Mime.mailParts = + [ [ Mime.plainPart . strictToLazy . Mail.plainBody $ mail ] + ] + , Mime.mailHeaders = [("Subject", Mail.subject mail)] + } + +address :: Text -> Mime.Address +address addressEmail = + Mime.Address + { Mime.addressName = Nothing + , Mime.addressEmail = addressEmail + } + +strictToLazy :: Text -> LT.Text +strictToLazy = toLazyText . fromText |