From f9ec7fc9cb384df056348cf7cfd9054ddbad9399 Mon Sep 17 00:00:00 2001 From: "Ralf S. Engelschall" Date: Sat, 20 Jan 2001 15:03:11 +0000 Subject: [PATCH] Sorry, I still inist that Petidomo visually resembles Majordomo as close as possible: now Petidomo no longer just sends a carbon-copy of the final "successful" mail after subscribe/unsubscribe operations to the list owner. Instead the list owner gets an own dedicated mail. The most important thing is that those mails have "SUBSCRIBE" and "UNSUBSCRIBE" tags in their Subject so one can easily monitor those operations as the list owner. --- subscribe.c | 50 +++++++++++++++++++++++++++++++++++++++++--------- unsubscribe.c | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 83 insertions(+), 18 deletions(-) diff --git a/subscribe.c b/subscribe.c index f024924..ae5c2bd 100644 --- a/subscribe.c +++ b/subscribe.c @@ -303,22 +303,19 @@ AddAddress(struct Mail * MailStruct, fprintf(fh, "%s\n", address); fclose(fh); - /* Send success notification to the originator, the new - subscriber, and the owner. */ + /* Send success notification to the originator and the new subscriber */ if (!strcasecmp(address, originator) == TRUE) - fh = vOpenMailer(envelope, address, owner, NULL); + fh = vOpenMailer(envelope, address, NULL); else - fh = vOpenMailer(envelope, address, originator, owner, NULL); + fh = vOpenMailer(envelope, address, originator, NULL); if (fh != NULL) { fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n", listname, ListConfig->fqdn); fprintf(fh, "To: %s\n", address); - if (!strcasecmp(address, originator) == TRUE) - fprintf(fh, "Cc: %s\n", owner); - else - fprintf(fh, "Cc: %s, %s\n", originator, owner); + if (strcasecmp(address, originator) == TRUE) + fprintf(fh, "Cc: %s\n", originator); fprintf(fh, "Subject: Petidomo: Request \"subscribe %s %s\"\n", address, listname); if (MailStruct->Message_Id != NULL) fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id); @@ -350,10 +347,45 @@ AddAddress(struct Mail * MailStruct, } else { - syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner); + syslog(LOG_ERR, "Failed to send email to \"%s\"!", address); return -1; } + /* Send success notification to the list owner */ + + fh = vOpenMailer(envelope, owner, NULL); + if (fh != NULL) { + fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n", + listname, ListConfig->fqdn); + fprintf(fh, "To: %s\n", owner); + fprintf(fh, "Subject: Petidomo: SUBSCRIBE %s@%s: %s\n", listname, ListConfig->fqdn, address); + if (MailStruct->Message_Id != NULL) + fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id); + fprintf(fh, "Precedence: junk\n"); + fprintf(fh, "Sender: %s\n", envelope); + fprintf(fh, "\n"); + if (!strcasecmp(address, originator) == TRUE) { + buffer = text_easy_sprintf( + "Per request from the subscriber, the address \"%s\"\n" + "has been subscribed to the \"%s\" mailing list.\n", + address, listname, ListConfig->fqdn); + } + else { + buffer = text_easy_sprintf( + "Per request from \"%s\", the address \"%s\"\n" + "has been subscribed to the \"%s\" mailing list.\n", + originator, address, listname, ListConfig->fqdn); + } + text_wordwrap(buffer, 75); + fprintf(fh, "%s\n", buffer); + fprintf(fh, "No action is required on your part.\n"); + CloseMailer(fh); + } + else { + syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner); + return -1; + } + /* Send introduction text to the new member. */ p = loadfile(ListConfig->intro_file); diff --git a/unsubscribe.c b/unsubscribe.c index d19a59a..dd278f7 100644 --- a/unsubscribe.c +++ b/unsubscribe.c @@ -308,22 +308,19 @@ DeleteAddress(struct Mail * MailStruct, fprintf(fh, "%s", p); fclose(fh); - /* Send success notification to the originator, and the - unsubscribed address. */ + /* Send success notification to the originator and the unsubscribed address */ if (!strcasecmp(address, originator) == TRUE) - fh = vOpenMailer(envelope, address, owner, NULL); + fh = vOpenMailer(envelope, address, NULL); else - fh = vOpenMailer(envelope, address, originator, owner, NULL); + fh = vOpenMailer(envelope, address, originator, NULL); if (fh != NULL) { fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n", listname, ListConfig->fqdn); fprintf(fh, "To: %s\n", address); - if (!strcasecmp(address, originator) == TRUE) - fprintf(fh, "Cc: %s\n", owner); - else - fprintf(fh, "Cc: %s, %s\n", originator, owner); + if (strcasecmp(address, originator) == TRUE) + fprintf(fh, "Cc: %s\n", originator); fprintf(fh, "Subject: Petidomo: Request \"unsubscribe %s %s\"\n", address, listname); if (MailStruct->Message_Id != NULL) fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id); @@ -348,10 +345,46 @@ DeleteAddress(struct Mail * MailStruct, } else { - syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner); + syslog(LOG_ERR, "Failed to send email to \"%s\"!", address); return -1; } } + + /* Send success notification to the list owner */ + + fh = vOpenMailer(envelope, owner, NULL); + if (fh != NULL) { + fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n", + listname, ListConfig->fqdn); + fprintf(fh, "To: %s\n", owner); + fprintf(fh, "Subject: Petidomo: UNSUBSCRIBE %s@%s: %s\n", listname, ListConfig->fqdn, address); + if (MailStruct->Message_Id != NULL) + fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id); + fprintf(fh, "Precedence: junk\n"); + fprintf(fh, "Sender: %s\n", envelope); + fprintf(fh, "\n"); + if (!strcasecmp(address, originator) == TRUE) { + buffer = text_easy_sprintf( + "Per request from the subscriber, the address \"%s\"\n" + "has been unsubscribed from the \"%s\" mailing list.\n", + address, listname, ListConfig->fqdn); + } + else { + buffer = text_easy_sprintf( + "Per request from \"%s\", the address \"%s\"\n" + "has been unsubscribed from the \"%s\" mailing list.\n", + originator, address, listname, ListConfig->fqdn); + } + text_wordwrap(buffer, 75); + fprintf(fh, "%s\n", buffer); + fprintf(fh, "No action is required on your part.\n"); + CloseMailer(fh); + } + else { + syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner); + return -1; + } + free(list); return 0; }