From d3064cffd20796822ade6cb15cdbb82b2185d1d0 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sat, 13 Apr 2013 12:45:21 +0200 Subject: [PATCH] SMPQ: we collect stati of all failed attempts; put them into the bounce messages. --- citadel/modules/smtp/serv_smtpeventclient.c | 13 ++++++++++--- citadel/modules/smtp/serv_smtpqueue.c | 6 +++--- citadel/modules/smtp/smtpqueue.h | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index bb11522c1..b3ec5da0e 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -154,7 +154,14 @@ eNextState FinalizeMessageSend_DB(AsyncIO *IO) { const char *Status; SmtpOutMsg *Msg = IO->Data; - + StrBuf *StatusMessage; + + if (Msg->MyQEntry->AllStatusMessages != NULL) + StatusMessage = Msg->MyQEntry->AllStatusMessages; + else + StatusMessage = Msg->MyQEntry->StatusMessage; + + if (Msg->MyQEntry->Status == 2) { SetSMTPState(IO, eSTMPfinished); Status = "Delivery successful."; @@ -175,7 +182,7 @@ eNextState FinalizeMessageSend_DB(AsyncIO *IO) Msg->user, Msg->node, Msg->name, - ChrPtr(Msg->MyQEntry->StatusMessage)); + ChrPtr(StatusMessage)); Msg->IDestructQueItem = DecreaseQReference(Msg->MyQItem); @@ -204,7 +211,7 @@ eNextState FinalizeMessageSend_DB(AsyncIO *IO) Msg->MyQItem->QueMsgID = -1; if (Msg->IDestructQueItem) - smtpq_do_bounce(Msg->MyQItem, Msg->msgtext, Msg->pCurrRelay); + smtpq_do_bounce(Msg->MyQItem, StatusMessage, 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 abc4b5d06..e3e04ac80 100644 --- a/citadel/modules/smtp/serv_smtpqueue.c +++ b/citadel/modules/smtp/serv_smtpqueue.c @@ -515,10 +515,10 @@ 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, ParsedURL *Relay) +void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *StatusMessage, StrBuf *OMsgTxt, ParsedURL *Relay) { static int seq = 0; - + struct CtdlMessage *bmsg = NULL; StrBuf *boundary; StrBuf *Msg = NULL; @@ -569,7 +569,7 @@ void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay) StrBufAppendBufPlain(Msg, HKEY(" "), 0); StrBufAppendBuf(Msg, ThisItem->Recipient, 0); StrBufAppendBufPlain(Msg, HKEY(": "), 0); - StrBufAppendBuf(Msg, ThisItem->StatusMessage, 0); + StrBufAppendBuf(Msg, StatusMessage, 0); StrBufAppendBufPlain(Msg, HKEY("\r\n"), 0); } } diff --git a/citadel/modules/smtp/smtpqueue.h b/citadel/modules/smtp/smtpqueue.h index 2bd4c2700..3fabeb90d 100644 --- a/citadel/modules/smtp/smtpqueue.h +++ b/citadel/modules/smtp/smtpqueue.h @@ -81,6 +81,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, ParsedURL *Relay); +void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *StatusMessage, StrBuf *OMsgTxt, ParsedURL *Relay); int CheckQEntryIsBounce(MailQEntry *ThisItem); -- 2.30.2