aboutsummaryrefslogtreecommitdiff
path: root/src/executable/haskell/Service/MailService.hs
diff options
context:
space:
mode:
authorJoris2018-06-17 23:24:47 +0200
committerJoris2018-06-18 11:13:55 +0200
commit0a4d3c8f12dc5797a919a00b6bcaf759947687cc (patch)
treebcb89781e22c2314bf0c064ebb37cb7f8a362f5c /src/executable/haskell/Service/MailService.hs
parente2a5c7c5c596d057b6fa9c08a8204ce1429cfdc4 (diff)
downloadad-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.hs46
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