structure Remind :> REMIND = struct open Config structure C = PgClient fun main _ = let val db = C.conn dbstring fun getEmail [name] = C.stringFromSql name ^ emailSuffix | getEmail row = raise Fail "remind getName" val names = C.map db getEmail "SELECT WebUserActive.name FROM WebUserActive JOIN Balance ON Balance.name = WebUserActive.name AND bal = Balance.id WHERE amount < 10" val m = Mail.mopen () in Mail.mwrite (m, "Subject: Reminder of low HCoop balance\n"); Mail.mwrite (m, "From: HCoop Portal \n"); Mail.mwrite (m, "Bcc: "); Mail.mwrite (m, String.concatWith "," names); Mail.mwrite (m, "\n\n"); Mail.mwrite (m, "This is a friendly reminder that your monetary balance at HCoop has dropped below\n"); Mail.mwrite (m, "the US$10 \"deposit\" amount. You can check your balance at:\n"); Mail.mwrite (m, "\t"); Mail.mwrite (m, urlPrefix); Mail.mwrite (m, "money\n\n"); Mail.mwrite (m, "You'll also see on that page a link you can follow to pay via PayPal.\n\n"); Mail.mwrite (m, "It would be great if you could bring your balance above that amount soon.\n"); Mail.mwrite (m, "More information on how to pay can be found at:\n"); Mail.mwrite (m, "\thttp://wiki.hcoop.net/wiki/MemberDues\n"); C.close db; OS.Process.success end end