void SetSMTPState(AsyncIO *IO, smtpstate State)
{
CitContext* CCC = IO->CitContext;
- memcpy(CCC->cs_clientname, SMTPStates[State].Key, SMTPStates[State].len + 1);
+ if (CCC != NULL)
+ memcpy(CCC->cs_clientname, SMTPStates[State].Key, SMTPStates[State].len + 1);
}
int SMTPClientDebugEnabled = 0;
{
const char *Status;
SmtpOutMsg *Msg = IO->Data;
-
+ StrBuf *StatusMessage;
+
+ if (Msg->MyQEntry->AllStatusMessages != NULL)
+ StatusMessage = Msg->MyQEntry->AllStatusMessages;
+ else
+ StatusMessage = Msg->MyQEntry->StatusMessage;
+
+
if (Msg->MyQEntry->Status == 2) {
SetSMTPState(IO, eSTMPfinished);
Status = "Delivery successful.";
Msg->user,
Msg->node,
Msg->name,
- ChrPtr(Msg->MyQEntry->StatusMessage));
+ ChrPtr(StatusMessage));
Msg->IDestructQueItem = DecreaseQReference(Msg->MyQItem);
Msg->MyQItem->QueMsgID = -1;
if (Msg->IDestructQueItem)
- smtpq_do_bounce(Msg->MyQItem, Msg->msgtext, Msg->pCurrRelay);
+ smtpq_do_bounce(Msg->MyQItem, StatusMessage, Msg->msgtext, Msg->pCurrRelay);
if (Msg->nRemain > 0)
{
eNextState FinalizeMessageSend(SmtpOutMsg *Msg)
{
/* hand over to DB Queue */
- return QueueDBOperation(&Msg->IO, FinalizeMessageSend_DB);
+ return EventQueueDBOperation(&Msg->IO, FinalizeMessageSend_DB);
}
eNextState FailOneAttempt(AsyncIO *IO)
Msg->MyQEntry->Status = 4;
EVS_syslog(LOG_DEBUG, "%s\n", __FUNCTION__);
- StrBufPlain(IO->ErrMsg, CKEY(ReadErrors[Msg->State]));
+ StrBufPrintf(IO->ErrMsg, "Timeout: %s while talking to %s",
+ ReadErrors[Msg->State].Key,
+ Msg->mx_host);
if (Msg->State > eRCPT)
return eAbort;
else
Msg->MyQEntry->Status = 4;
EVS_syslog(LOG_DEBUG, "%s\n", __FUNCTION__);
- StrBufPlain(IO->ErrMsg, CKEY(ReadErrors[Msg->State]));
+ StrBufPrintf(IO->ErrMsg, "Connection failure: %s while talking to %s",
+ ReadErrors[Msg->State].Key,
+ Msg->mx_host);
+
return FailOneAttempt(IO);
}
eNextState SMTP_C_DNSFail(AsyncIO *IO)