rp

simple email tools
git clone https://git.parazyd.org/rp
Log | Files | Refs | README | LICENSE

commit 85e612430fe7a24f11d00b41e53e8c1849d2d7e8
parent b9621702a832d1063c5030a3469b02293e3f220e
Author: parazyd <parazyd@dyne.org>
Date:   Tue, 26 Feb 2019 11:47:45 +0100

Add 'Subject' handling in sieve.c.

Diffstat:
Msieve.c | 48+++++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)

diff --git a/sieve.c b/sieve.c @@ -13,36 +13,52 @@ char *argv0; int vflag; int genrule(int rt, char *line) { - char *type, *email, m[256]; - char *mbox = m; + char *type, *fv, m[256], f[256]; + char *mbox = m, *filt = f; + + switch (rt) { + case 69: /* whitelist.abook */ + strcpy(filt, "\"From\""); + strcpy(mbox, "INBOX"); + break; + case 1: /* To: */ + strcpy(filt, "[ \"To\",\"Cc\" ]"); + break; + case 2: /* From: */ + strcpy(filt, "\"From\""); + break; + case 3: /* Subject: */ + strcpy(filt, "\"Subject\""); + break; + default: + return 1; + } switch (rt) { case 69: strtok(line, "="); - email = strtok(NULL, ","); - if (!email) + fv= strtok(NULL, ","); + if (!fv) return 1; - - strcpy(mbox, "INBOX"); break; case 1: /* To: */ case 2: /* From: */ - type = strtok(line, ","); + case 3: /* Subject: */ + type = strtok(line, "/"); if (!type) return 1; - email = strtok(NULL, ","); - if (!email) return 1; - mbox = strtok(NULL, ","); - if (!mbox) - return 1; + fv = strtok(NULL, "/"); + if (!fv) return 1; + mbox = strtok(NULL, "/"); + if (!mbox) return 1; break; default: - return 0; + return 1; } - printf("if header :contains %s \"%s\"", rt != 1 ? "\"From\"" : "[ \"To\",\"Cc\" ]", email); + printf("if header :contains %s %s", filt, fv); printf(" { fileinto :create \"%s\"; stop; }\n", mbox); if (vflag) - info("%s: %s -> %s\n", rt == 1 ? "to" : "from", email, mbox); + info("%s: %s -> %s\n", filt, fv, mbox); return 0; } @@ -67,6 +83,8 @@ int sievemain(int argc, char *argv[]) { rt = 1; else if (!strncmp("from", l, 4)) rt = 2; + else if (!strncmp("subject", l, 7)) + rt = 3; else if (!strncmp("email=", l, 6)) rt = 69;