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 23:00:20 +0000 (01:00 +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 d8f46ca93c10fddc02ff4a072b98dfc93d748c14..03697d30cf04c6c6f8cf1bd22e7a0a9eaa7d3a80 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 8c5c7378eaf4cc2c82e25779d75d1c63da8ef7c4..5161a1eb060b52ee8ba651d47c95fa73f69aa630 100644 (file)
@@ -510,7 +510,7 @@ StrBuf *smtp_load_msg(OneQueItem *MyQItem, int n)
  * 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;
 
@@ -561,6 +561,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);
@@ -577,6 +578,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);