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)
{
* 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;
{
++num_bounces;
+ StrBufAppendBufPlain(Msg, HKEY(" "), 0);
StrBufAppendBuf(Msg, ThisItem->Recipient, 0);
StrBufAppendBufPlain(Msg, HKEY(": "), 0);
StrBufAppendBuf(Msg, ThisItem->StatusMessage, 0);
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",
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);