int MsgCount = 0;
int run_queue_now = 0; /* Set to 1 to ignore SMTP send retry times */
+void RegisterQItemHandler(const char *Key, long Len, QItemHandler H)
+{
+ QItemHandlerStruct *HS = (QItemHandlerStruct*)malloc(sizeof(QItemHandlerStruct));
+ HS->H = H;
+ Put(QItemHandlers, Key, Len, HS, NULL);
+}
+
+
+
void smtp_try_one_queue_entry(OneQueItem *MyQItem,
MailQEntry *MyQEntry,
StrBuf *MsgText,
StrBufExtract_NextToken(Token, Line, &pItemPart, '|');
if (GetHash(QItemHandlers, SKEY(Token), &vHandler))
{
- QItemHandler H;
- H = (QItemHandler) vHandler;
- H(Item, Line, &pItemPart);
+ QItemHandlerStruct *HS;
+ HS = (QItemHandlerStruct*) vHandler;
+ HS->H(Item, Line, &pItemPart);
}
}
FreeStrBuf(&Line);
StrBufAppendBufPlain(QMessage, HKEY("\nattempted|"), 0);
StrBufAppendPrintf(QMessage, "%ld",
- MyQItem->ReattemptWhen);
+ ctdl_ev_now() + MyQItem->Retry);
It = GetNewHashPos(MyQItem->MailQEntries, 0);
while (GetNextHashPos(MyQItem->MailQEntries, It, &len, &Key, &vQE))
{
Item->Retry =
StrBufExtractNext_int(Line, Pos, '|');
- Item->Retry *= 2;
+ if (Item->Retry == 0)
+ Item->Retry = SMTP_RETRY_INTERVAL;
+ else
+ Item->Retry *= 2;
}
QItemHandlers = NewHash(0, NULL);
- Put(QItemHandlers, HKEY("msgid"), QItem_Handle_MsgID, reference_free_handler);
- Put(QItemHandlers, HKEY("envelope_from"), QItem_Handle_EnvelopeFrom, reference_free_handler);
- Put(QItemHandlers, HKEY("retry"), QItem_Handle_retry, reference_free_handler);
- Put(QItemHandlers, HKEY("attempted"), QItem_Handle_Attempted, reference_free_handler);
- Put(QItemHandlers, HKEY("remote"), QItem_Handle_Recipient, reference_free_handler);
- Put(QItemHandlers, HKEY("bounceto"), QItem_Handle_BounceTo, reference_free_handler);
- Put(QItemHandlers, HKEY("source_room"), QItem_Handle_SenderRoom, reference_free_handler);
- Put(QItemHandlers, HKEY("submitted"), QItem_Handle_Submitted, reference_free_handler);
+ RegisterQItemHandler(HKEY("msgid"), QItem_Handle_MsgID);
+ RegisterQItemHandler(HKEY("envelope_from"), QItem_Handle_EnvelopeFrom);
+ RegisterQItemHandler(HKEY("retry"), QItem_Handle_retry);
+ RegisterQItemHandler(HKEY("attempted"), QItem_Handle_Attempted);
+ RegisterQItemHandler(HKEY("remote"), QItem_Handle_Recipient);
+ RegisterQItemHandler(HKEY("bounceto"), QItem_Handle_BounceTo);
+ RegisterQItemHandler(HKEY("source_room"), QItem_Handle_SenderRoom);
+ RegisterQItemHandler(HKEY("submitted"), QItem_Handle_Submitted);
+
smtp_init_spoolout();
CtdlRegisterEVCleanupHook(smtp_evq_cleanup);