8dc46b639f8679ca33220e929d751d9bd9278d9a
[hcoop/zz_old/portal.git] / remind / remind.sml
1 structure Remind :> REMIND =
2 struct
3
4 open Config
5
6 structure C = PgClient
7
8 fun main _ =
9 let
10 val db = C.conn dbstring
11
12 fun getEmail [name] = C.stringFromSql name ^ emailSuffix
13 | getEmail row = raise Fail "remind getName"
14
15 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"
16
17 val m = Mail.mopen ()
18 in
19 Mail.mwrite (m, "Subject: Reminder of low HCoop balance\n");
20 Mail.mwrite (m, "From: HCoop Portal <payment");
21 Mail.mwrite (m, emailSuffix);
22 Mail.mwrite (m, ">\n");
23 Mail.mwrite (m, "Bcc: ");
24 Mail.mwrite (m, String.concatWith "," names);
25 Mail.mwrite (m, "\n\n");
26 Mail.mwrite (m, "This is a friendly reminder that your monetary balance at HCoop has dropped below\n");
27 Mail.mwrite (m, "the US$10 \"deposit\" amount. You can check your balance at:\n");
28 Mail.mwrite (m, "\t");
29 Mail.mwrite (m, urlPrefix);
30 Mail.mwrite (m, "money\n\n");
31 Mail.mwrite (m, "You'll also see on that page a link you can follow to pay via PayPal.\n\n");
32 Mail.mwrite (m, "It would be great if you could bring your balance above that amount soon.\n");
33 Mail.mwrite (m, "More information on how to pay can be found at:\n");
34 Mail.mwrite (m, "\thttp://wiki.hcoop.net/wiki/MemberDues\n");
35 C.close db;
36 OS.Process.success
37 end
38
39 end