{-# LANGUAGE OverloadedStrings #-} module Sender (generateMail ,send ) where import Network.Mail.Mime import Network.Mail.SMTP import qualified Data.Text as ST import qualified Data.Text.Lazy as LT import Monad import Data.Time.LocalTime (getZonedTime) import Data.Time.Format (formatTime, defaultTimeLocale) rfc5322Format :: String rfc5322Format = "%a, %d %b %0Y %T %z" generateMail :: (MonadIO m) => ST.Text -> ST.Text -> ST.Text -> LT.Text -> m Mail generateMail to from subj body = do time <- liftIO getZonedTime let timeString = ST.pack $ formatTime defaultTimeLocale rfc5322Format time mailWithoutDate = simpleMail' (Address Nothing to) (Address Nothing from) subj body mailWithDate = mailWithoutDate {mailHeaders = ("Date",timeString) : mailHeaders mailWithoutDate} return mailWithDate -- domain -> Username -> password -> To -> From -> Subject -> Body send :: (MonadIO m) => String -> String -> String -> ST.Text -> ST.Text -> ST.Text -> LT.Text -> m () send domain user pass to from subj body = do mail <- liftIO $ generateMail to from subj body liftIO $ sendMailWithLoginTLS domain user pass mail