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.
This commit is contained in:
parent
afadb77b0a
commit
f9ec7fc9cb
50
subscribe.c
50
subscribe.c
@ -303,22 +303,19 @@ AddAddress(struct Mail * MailStruct,
|
|||||||
fprintf(fh, "%s\n", address);
|
fprintf(fh, "%s\n", address);
|
||||||
fclose(fh);
|
fclose(fh);
|
||||||
|
|
||||||
/* Send success notification to the originator, the new
|
/* Send success notification to the originator and the new subscriber */
|
||||||
subscriber, and the owner. */
|
|
||||||
|
|
||||||
if (!strcasecmp(address, originator) == TRUE)
|
if (!strcasecmp(address, originator) == TRUE)
|
||||||
fh = vOpenMailer(envelope, address, owner, NULL);
|
fh = vOpenMailer(envelope, address, NULL);
|
||||||
else
|
else
|
||||||
fh = vOpenMailer(envelope, address, originator, owner, NULL);
|
fh = vOpenMailer(envelope, address, originator, NULL);
|
||||||
if (fh != NULL)
|
if (fh != NULL)
|
||||||
{
|
{
|
||||||
fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
|
fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
|
||||||
listname, ListConfig->fqdn);
|
listname, ListConfig->fqdn);
|
||||||
fprintf(fh, "To: %s\n", address);
|
fprintf(fh, "To: %s\n", address);
|
||||||
if (!strcasecmp(address, originator) == TRUE)
|
if (strcasecmp(address, originator) == TRUE)
|
||||||
fprintf(fh, "Cc: %s\n", owner);
|
fprintf(fh, "Cc: %s\n", originator);
|
||||||
else
|
|
||||||
fprintf(fh, "Cc: %s, %s\n", originator, owner);
|
|
||||||
fprintf(fh, "Subject: Petidomo: Request \"subscribe %s %s\"\n", address, listname);
|
fprintf(fh, "Subject: Petidomo: Request \"subscribe %s %s\"\n", address, listname);
|
||||||
if (MailStruct->Message_Id != NULL)
|
if (MailStruct->Message_Id != NULL)
|
||||||
fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
|
fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
|
||||||
@ -350,10 +347,45 @@ AddAddress(struct Mail * MailStruct,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
|
syslog(LOG_ERR, "Failed to send email to \"%s\"!", address);
|
||||||
return -1;
|
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. */
|
/* Send introduction text to the new member. */
|
||||||
|
|
||||||
p = loadfile(ListConfig->intro_file);
|
p = loadfile(ListConfig->intro_file);
|
||||||
|
|||||||
@ -308,22 +308,19 @@ DeleteAddress(struct Mail * MailStruct,
|
|||||||
fprintf(fh, "%s", p);
|
fprintf(fh, "%s", p);
|
||||||
fclose(fh);
|
fclose(fh);
|
||||||
|
|
||||||
/* Send success notification to the originator, and the
|
/* Send success notification to the originator and the unsubscribed address */
|
||||||
unsubscribed address. */
|
|
||||||
|
|
||||||
if (!strcasecmp(address, originator) == TRUE)
|
if (!strcasecmp(address, originator) == TRUE)
|
||||||
fh = vOpenMailer(envelope, address, owner, NULL);
|
fh = vOpenMailer(envelope, address, NULL);
|
||||||
else
|
else
|
||||||
fh = vOpenMailer(envelope, address, originator, owner, NULL);
|
fh = vOpenMailer(envelope, address, originator, NULL);
|
||||||
if (fh != NULL)
|
if (fh != NULL)
|
||||||
{
|
{
|
||||||
fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
|
fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
|
||||||
listname, ListConfig->fqdn);
|
listname, ListConfig->fqdn);
|
||||||
fprintf(fh, "To: %s\n", address);
|
fprintf(fh, "To: %s\n", address);
|
||||||
if (!strcasecmp(address, originator) == TRUE)
|
if (strcasecmp(address, originator) == TRUE)
|
||||||
fprintf(fh, "Cc: %s\n", owner);
|
fprintf(fh, "Cc: %s\n", originator);
|
||||||
else
|
|
||||||
fprintf(fh, "Cc: %s, %s\n", originator, owner);
|
|
||||||
fprintf(fh, "Subject: Petidomo: Request \"unsubscribe %s %s\"\n", address, listname);
|
fprintf(fh, "Subject: Petidomo: Request \"unsubscribe %s %s\"\n", address, listname);
|
||||||
if (MailStruct->Message_Id != NULL)
|
if (MailStruct->Message_Id != NULL)
|
||||||
fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
|
fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
|
||||||
@ -348,10 +345,46 @@ DeleteAddress(struct Mail * MailStruct,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
|
syslog(LOG_ERR, "Failed to send email to \"%s\"!", address);
|
||||||
return -1;
|
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);
|
free(list);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user