From 8d8541b74ae9c251f8f7b36b22377b440dc272fd Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Mon, 30 Jul 2012 23:50:42 +0200 Subject: [PATCH] SMTP-Client: when relaying failed also notify aide that somethings broken. (we don't need to do that if the message was sent via a room and the bounce will end up in the aide room anyways) --- citadel/modules/smtp/serv_smtpeventclient.c | 2 +- citadel/modules/smtp/serv_smtpqueue.c | 15 ++++++++++++++- citadel/modules/smtp/smtpqueue.h | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index e85dfe411..f1901a996 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -177,7 +177,7 @@ eNextState FinalizeMessageSend_DB(AsyncIO *IO) Msg->MyQItem->QueMsgID = -1; if (Msg->IDestructQueItem) - smtpq_do_bounce(Msg->MyQItem, Msg->msgtext); + smtpq_do_bounce(Msg->MyQItem, Msg->msgtext, Msg->pCurrRelay); if (Msg->nRemain > 0) { diff --git a/citadel/modules/smtp/serv_smtpqueue.c b/citadel/modules/smtp/serv_smtpqueue.c index a9ad37518..cd684c9ff 100644 --- a/citadel/modules/smtp/serv_smtpqueue.c +++ b/citadel/modules/smtp/serv_smtpqueue.c @@ -512,7 +512,7 @@ StrBuf *smtp_load_msg(OneQueItem *MyQItem, int n, char **Author, char **Address) * instructions for "5" codes (permanent fatal errors) and produce/deliver * a "bounce" message (delivery status notification). */ -void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt) +void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay) { static int seq = 0; @@ -563,6 +563,7 @@ void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt) { ++num_bounces; + StrBufAppendBufPlain(Msg, HKEY(" "), 0); StrBufAppendBuf(Msg, ThisItem->Recipient, 0); StrBufAppendBufPlain(Msg, HKEY(": "), 0); StrBufAppendBuf(Msg, ThisItem->StatusMessage, 0); @@ -579,6 +580,18 @@ void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt) return; } + if ((StrLength(MyQItem->SenderRoom) == 0) && MyQItem->HaveRelay) { + /* one message that relaying is broken is enough; no extra room error message. */ + StrBuf *RelayDetails = NewStrBuf(); + + StrBufPrintf(RelayDetails, + "Relaying via %s failed permanently. \n Reason:\n%s\n Revalidate your relay configuration.", + ChrPtr(Relay->URL), + ChrPtr(Msg)); + CtdlAideMessage(ChrPtr(RelayDetails), "Relaying Failed"); + FreeStrBuf(&RelayDetails); + } + boundary = NewStrBufPlain(HKEY("=_Citadel_Multipart_")); StrBufAppendPrintf(boundary, "%s_%04x%04x", diff --git a/citadel/modules/smtp/smtpqueue.h b/citadel/modules/smtp/smtpqueue.h index 8efe13210..b2778b995 100644 --- a/citadel/modules/smtp/smtpqueue.h +++ b/citadel/modules/smtp/smtpqueue.h @@ -79,6 +79,6 @@ int GetShutdownDeliveries(OneQueItem *MyQItem); void RemoveQItem(OneQueItem *MyQItem); int CountActiveQueueEntries(OneQueItem *MyQItem, int before); StrBuf *SerializeQueueItem(OneQueItem *MyQItem); -void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt); +void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay); int CheckQEntryIsBounce(MailQEntry *ThisItem); -- 2.30.2