Hector Santos wrote:
lines 3399 and 3400 of deliver.c:
| if (i == EX_TEMPFAIL)
| to->q_state = QS_RETRY;
This happens for i != EX_OK after (in line 3372):
Nope, thats not it. Thats for sending the RCTP commands.
We are looking for something along the lines
if (rcode == EX_UNAVAILABLE)
to->q_state = QS_QUEUEUP
Maybe we are looking for line 3396:
| markfailure(e, to, mci, i, false);
Markfailure does a QS_QUEUEUP, it's the switch you have
quoted here the day before yesterday (line 3676 ff.):
| markfailure(e, q, mci, rcode, ovr)
| case EX_TEMPFAIL:
| q->q_state = QS_QUEUEUP;
In line 3396 i == EX_TEMPFAIL for a 4xx reply code in
smtprcpt() and similar problems, and therefore rcode
is EX_TEMPFAIL in markfailure(), resulting in QUEUEUP.
We now know its there.
Yep, it is what I guessed the day before yesterday:
The switch you've quoted is used also after RCPT TO
in smtprcpt(), not only after DATA. It is a part of
the markfailure() used everywhere.