From: Wilfried Goesgens Date: Mon, 30 Jul 2012 22:58:46 +0000 (+0200) Subject: SMTPClient: when relaying with users/email addresses fail with an aidemessage if... X-Git-Tag: v8.20~277 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=c1c91208257a253e65275545aea79bba4699ba09 SMTPClient: when relaying with users/email addresses fail with an aidemessage if none found valid --- diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index f1901a996..d70e80a3f 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -587,8 +587,10 @@ void smtp_try_one_queue_entry(OneQueItem *MyQItem, if (KeepMsgText) Msg->msgtext = MsgText; else Msg->msgtext = NewStrBufDup(MsgText); - if (smtp_resolve_recipients(Msg)) { - + if (((!MyQItem->HaveRelay || + (MyQItem->URL != NULL)) && + smtp_resolve_recipients(Msg))) + { safestrncpy( ((CitContext *)Msg->IO.CitContext)->cs_host, Msg->node, @@ -619,8 +621,9 @@ void smtp_try_one_queue_entry(OneQueItem *MyQItem, /* No recipients? well fail then. */ if (Msg->MyQEntry != NULL) { Msg->MyQEntry->Status = 5; - StrBufPlain(Msg->MyQEntry->StatusMessage, - HKEY("Invalid Recipient!")); + if (StrLength(Msg->MyQEntry->StatusMessage) == 0) + StrBufPlain(Msg->MyQEntry->StatusMessage, + HKEY("Invalid Recipient!")); } FinalizeMessageSend_DB(&Msg->IO); DeleteSmtpOutMsg(&Msg->IO); diff --git a/citadel/modules/smtp/serv_smtpqueue.c b/citadel/modules/smtp/serv_smtpqueue.c index cd684c9ff..5b471127e 100644 --- a/citadel/modules/smtp/serv_smtpqueue.c +++ b/citadel/modules/smtp/serv_smtpqueue.c @@ -581,12 +581,16 @@ void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay) } if ((StrLength(MyQItem->SenderRoom) == 0) && MyQItem->HaveRelay) { + const char *RelayUrlStr = "[not found]"; /* one message that relaying is broken is enough; no extra room error message. */ StrBuf *RelayDetails = NewStrBuf(); + if (Relay != NULL) + RelayUrlStr = ChrPtr(Relay->URL); + StrBufPrintf(RelayDetails, "Relaying via %s failed permanently. \n Reason:\n%s\n Revalidate your relay configuration.", - ChrPtr(Relay->URL), + RelayUrlStr, ChrPtr(Msg)); CtdlAideMessage(ChrPtr(RelayDetails), "Relaying Failed"); FreeStrBuf(&RelayDetails); @@ -778,9 +782,10 @@ ParsedURL *LoadRelayUrls(OneQueItem *MyQItem, if (!strcmp(User + 1, Author) || !strcmp(User + 1, Address)) StrBufCutAt(One, 0, User); - else + else { + MyQItem->HaveRelay = 1; continue; - + } } if (!ParseURL(Url, One, DefaultMXPort)) { SMTPC_syslog(LOG_DEBUG, @@ -952,12 +957,52 @@ void smtp_do_procmsg(long msgnum, void *userdata) { int m = MyQItem->ActiveDeliveries; int i = 1; + It = GetNewHashPos(MyQItem->MailQEntries, 0); + Msg = smtp_load_msg(MyQItem, n, &Author, &Address); RelayUrls = LoadRelayUrls(MyQItem, Author, Address); + if ((RelayUrls == NULL) && MyQItem->HaveRelay) { + + while ((i <= m) && + (GetNextHashPos(MyQItem->MailQEntries, + It, &len, &Key, &vQE))) + { + int KeepBuffers = (i == m); + MailQEntry *ThisItem = vQE; + StrBufPrintf(ThisItem->StatusMessage, + "No relay configured matching %s / %s", + (Author != NULL)? Author : "", + (Address != NULL)? Address : ""); + ThisItem->Status = 5; + + nActivated++; + + if (i > 1) n = MsgCount++; + syslog(LOG_INFO, + "SMTPC: giving up on <%ld> <%s> %d / %d \n", + MyQItem->MessageID, + ChrPtr(ThisItem->Recipient), + i, + m); + (*((int*) userdata)) ++; + smtp_try_one_queue_entry(MyQItem, + ThisItem, + Msg, + KeepBuffers, + n, + RelayUrls); + + if (KeepBuffers) HaveBuffers = 1; + + i++; + } + DeleteHashPos(&It); + + return; + } if (Author != NULL) free (Author); if (Address != NULL) free (Address); - It = GetNewHashPos(MyQItem->MailQEntries, 0); while ((i <= m) && (GetNextHashPos(MyQItem->MailQEntries, It, &len, &Key, &vQE)))