module Data.CSV.Table.Email
(
Email (..)
, sendMail
) where
import Text.Printf (printf)
import System.Process
import Control.Monad (forM_)
import Data.List (intercalate)
import Data.CSV.Table.Types
import Data.CSV.Table.Ops
data Email = E { uid :: String
, to :: String
, cc :: [String]
, sender :: String
, subject :: String
, text :: String
, send :: Bool
} deriving (Show)
sendMail :: Table -> (RowInfo -> Email) -> IO ()
sendMail t f = forM_ (mapRows f t) sendMail1
sendMail1 :: Email -> IO ()
sendMail1 e = do
let tmp = uid e
let cmd = mailCmd e
writeFile tmp (text e)
status <- if send e then show `fmap` system cmd else return "FAKESEND"
putStrLn $ printf "[exec: %s] Status[%s]: %s %s" cmd status (uid e) (to e)
mailCmd :: Email -> String
mailCmd e =
printf "mail -s \"%s\" -aFrom:%s %s %s < %s" (subject e) (sender e) (to e) (ccs $ cc e) (uid e)
where
ccs [] = ""
ccs xs = "-c " ++ intercalate "," xs