SMTP-Client: when relaying failed also notify aide that somethings broken.
authorWilfried Goesgens <dothebart@citadel.org>
Mon, 30 Jul 2012 21:50:42 +0000 (23:50 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Mon, 30 Jul 2012 21:50:42 +0000 (23:50 +0200)
(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
citadel/modules/smtp/serv_smtpqueue.c
citadel/modules/smtp/smtpqueue.h

index e85dfe411f1f96c2a90b6c4cd1cb66faf2dcc043..f1901a99641401b044cda0f74451c7b3b7c08fcd 100644 (file)
@@ -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)
        {
index a9ad37518659a5ec3143d350e847f993bc3b1d17..cd684c9ff01784ee28877a7a68f7b6167eaa9112 100644 (file)
@@ -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",
index 8efe13210834fa6afb59af300ccac9484eab8739..b2778b99517d17d91b7b7f01af39a07c4b18958a 100644 (file)
@@ -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);