X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fsmtp%2Fserv_smtpeventclient.c;h=fbcf67c2ced45a0c8c56f8ed27efe74831800b8c;hb=18f747e331fdcb3619105c03fbac77cdb1bf9cfc;hp=9e97dda97aed2e8660abb7b31cf1d46b3d0e83f1;hpb=81c6612b5c71982c28057c30c42ce4cbb8120eaf;p=citadel.git diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index 9e97dda97..fbcf67c2c 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -153,9 +153,10 @@ eNextState FinalizeMessageSend_DB(AsyncIO *IO) Msg->IDestructQueItem = DecreaseQReference(Msg->MyQItem); - Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem); + Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem, 0); if (Msg->MyQEntry->Active && + !Msg->MyQEntry->StillActive && CheckQEntryIsBounce(Msg->MyQEntry)) { /* are we casue for a bounce mail? */ @@ -176,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) { @@ -586,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, @@ -618,11 +621,12 @@ 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); + DeleteSmtpOutMsg(Msg); } } @@ -751,6 +755,28 @@ eNextState SMTP_C_Shutdown(AsyncIO *IO) EVS_syslog(LOG_DEBUG, "%s\n", __FUNCTION__); SmtpOutMsg *Msg = IO->Data; + switch (IO->NextState) { + case eSendDNSQuery: + case eReadDNSReply: + + /* todo: abort c-ares */ + case eConnect: + case eSendReply: + case eSendMore: + case eSendFile: + case eReadMessage: + case eReadMore: + case eReadPayload: + case eReadFile: + StopClientWatchers(IO, 1); + break; + case eDBQuery: + + break; + case eTerminateConnection: + case eAbort: + break; + } Msg->MyQEntry->Status = 3; StrBufPlain(Msg->MyQEntry->StatusMessage, HKEY("server shutdown during message submit."));