Mercurial > hg > mlmmj
changeset 744:926f184eec44
Add a $subject$ substitution for list texts
author | Ben Schmidt |
---|---|
date | Mon, 20 Sep 2010 02:25:54 +1000 |
parents | c2ffbdcf3be5 |
children | 5edfa9eef6c7 |
files | ChangeLog README.listtexts src/mlmmj-process.c |
diffstat | 3 files changed, 40 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Sep 20 02:07:42 2010 +1000 +++ b/ChangeLog Mon Sep 20 02:25:54 2010 +1000 @@ -1,3 +1,4 @@ + o Add a $subject$ substitution for list texts o Changes to how $originalmail$ works -- existing installations will change behaviour due to this; prepending a space to the lines currently containing $originalmail$ in the listtexts will generally retain current behaviour
--- a/README.listtexts Mon Sep 20 02:07:42 2010 +1000 +++ b/README.listtexts Mon Sep 20 02:25:54 2010 +1000 @@ -237,13 +237,19 @@ number like 1000000000. - $posteraddr$ - (available only in subonlypost) + (available only in access, notintocc, moderation, moderation-poster and + subonlypost) the from address of the message that was received as determined by Mlmmj - $subaddr$ (available only in submod-moderator and [un]sub-confirm[-digest|-nomail]) the address requested to be (un-)subscribed +- $subject$ + (available only in access, notintocc, moderation, moderation-poster and + subonlypost) + the subject line of the message in question + - \uNNNN (NNNN are hex digits) a Unicode character
--- a/src/mlmmj-process.c Mon Sep 20 02:07:42 2010 +1000 +++ b/src/mlmmj-process.c Mon Sep 20 02:25:54 2010 +1000 @@ -52,6 +52,7 @@ #include "memory.h" #include "log_oper.h" #include "chomp.h" +#include "unistr.h" enum action { ALLOW, @@ -71,14 +72,16 @@ void newmoderated(const char *listdir, const char *mailfilename, - const char *mlmmjsend, const char *efromsender) + const char *mlmmjsend, const char *efromsender, + size_t tokencount, char **data) { + size_t i; char *from, *listfqdn, *listname, *moderators = NULL; char *buf, *replyto, *listaddr = getlistaddr(listdir), *listdelim; char *queuefilename = NULL, *moderatorsfilename, *efromismod = NULL; char *mailbasename = mybasename(mailfilename), *tmp, *to; int moderatorsfd, foundaddr = 0, notifymod = 0, status; - char *maildata[4] = { "moderateaddr", NULL, "moderators", NULL }; + char *maildata[10] = { "moderateaddr", NULL, "moderators", NULL }; pid_t childpid, pid; #if 0 printf("mailfilename = [%s], mailbasename = [%s]\n", mailfilename, @@ -87,6 +90,13 @@ listfqdn = genlistfqdn(listaddr); listname = genlistname(listaddr); + MY_ASSERT(tokencount<=3) + for (i=0; i<tokencount; i++) { + maildata[4+2*i] = data[2*i]; + maildata[5+2*i] = data[1+2*i]; + } + tokencount += 2; + moderatorsfilename = concatstr(2, listdir, "/control/moderators"); if((moderatorsfd = open(moderatorsfilename, O_RDONLY)) < 0) { log_error(LOG_ARGS, "Could not open '%s'", moderatorsfilename); @@ -133,7 +143,7 @@ myfree(listfqdn); queuefilename = prepstdreply(listdir, "moderation", "$listowner$", - to, replyto, 2, maildata, + to, replyto, tokencount, maildata, mailfilename); /* we might need to exec more than one mlmmj-send */ @@ -176,7 +186,7 @@ queuefilename = prepstdreply(listdir, "moderation-poster", "$listowner$", efromsender, - NULL, 1, maildata+2, mailfilename); + NULL, tokencount-1, maildata+2, mailfilename); execlp(mlmmjsend, mlmmjsend, "-l", "1", @@ -385,7 +395,8 @@ char *listfqdn, *listname, *fromaddr; char *queuefilename, *recipextra = NULL, *owner = NULL; char *maxmailsizestr; - char *maildata[4] = { "posteraddr", NULL, "maxmailsize", NULL }; + char *maildata[6] = { "subject", NULL, + "posteraddr", NULL, "maxmailsize", NULL }; char *envstr, *efrom; struct stat st; uid_t uid; @@ -404,6 +415,7 @@ { "Cc:", 0, NULL }, { "Return-Path:", 0, NULL }, { "Delivered-To:", 0, NULL }, + { "Subject:", 0, NULL }, { NULL, 0, NULL } }; @@ -538,6 +550,8 @@ for(i = 0; i < readhdrs[0].valuecount; i++) { find_email_adr(readhdrs[0].values[i], &fromemails); } + if (fromemails.emailcount) + maildata[3] = fromemails.emaillist[0]; /* To: addresses */ for(i = 0; i < readhdrs[1].valuecount; i++) { @@ -559,6 +573,12 @@ find_email_adr(readhdrs[4].values[i], &dtemails); } + /* Subject: */ + if (readhdrs[5].valuecount) + maildata[1] = unistr_header_to_utf8(readhdrs[5].values[0]); + if (!maildata[1]) + maildata[1] = mystrdup(""); + /* envelope from */ if((envstr = getenv("SENDER")) != NULL) { /* qmail, postfix, exim */ @@ -635,7 +655,7 @@ close(rawmailfd); close(donemailfd); unlink(mailfile); - log_oper(listdir, OPLOGFNAME, "mlmmj-recieve: sending" + log_oper(listdir, OPLOGFNAME, "mlmmj-process: sending" " mail from %s to owner", efrom); execlp(mlmmjsend, mlmmjsend, @@ -692,11 +712,11 @@ listfqdn = genlistfqdn(listaddr); fromaddr = concatstr(4, listname, listdelim, "bounces-help@", listfqdn); - maildata[3] = maxmailsizestr; + maildata[5] = maxmailsizestr; queuefilename = prepstdreply(listdir, "maxmailsize", "$listowner$", fromemails.emaillist[0], - NULL, 1, maildata+2, donemailname); + NULL, 1, maildata+4, donemailname); MY_ASSERT(queuefilename) myfree(listdelim); myfree(listname); @@ -811,7 +831,7 @@ listfqdn); queuefilename = prepstdreply(listdir, "notintocc", "$listowner$", fromemails.emaillist[0], - NULL, 0, NULL, donemailname); + NULL, 2, maildata, donemailname); MY_ASSERT(queuefilename) myfree(listdelim); myfree(listname); @@ -867,12 +887,11 @@ listdelim = getlistdelim(listdir); listname = genlistname(listaddr); listfqdn = genlistfqdn(listaddr); - maildata[1] = fromemails.emaillist[0]; fromaddr = concatstr(4, listname, listdelim, "bounces-help@", listfqdn); queuefilename = prepstdreply(listdir, "subonlypost", "$listowner$", fromemails.emaillist[0], - NULL, 1, maildata, donemailname); + NULL, 2, maildata, donemailname); MY_ASSERT(queuefilename) myfree(listaddr); myfree(listdelim); @@ -927,7 +946,7 @@ queuefilename = prepstdreply(listdir, "access", "$listowner$", fromemails.emaillist[0], - NULL, 0, NULL, donemailname); + NULL, 2, maildata, donemailname); MY_ASSERT(queuefilename) myfree(listaddr); myfree(listdelim); @@ -1004,7 +1023,7 @@ fsync(omitfd); close(omitfd); } - newmoderated(listdir, mqueuename, mlmmjsend, efrom); + newmoderated(listdir, mqueuename, mlmmjsend, efrom, 2, maildata); return EXIT_SUCCESS; }