FreeURL(&Msg->Relay);
FreeStrBuf(&Msg->msgtext);
FreeAsyncIOContents(&Msg->IO);
-/// memset (Msg, 0, sizeof(SmtpOutMsg)); /* just to be shure... */
+ memset (Msg, 0, sizeof(SmtpOutMsg)); /* just to be shure... */
free(Msg);
}
nRemain = CountActiveQueueEntries(Msg->MyQItem);
+ if (Msg->MyQEntry->Active &&
+ CheckQEntryIsBounce(Msg->MyQEntry))
+ {
+ /* are we casue for a bounce mail? */
+ Msg->MyQItem->SendBounceMail = 1;
+ }
+
if ((nRemain > 0) || IDestructQueItem)
MsgData = SerializeQueueItem(Msg->MyQItem);
else
msg->cm_anon_type = MES_NORMAL;
msg->cm_format_type = FMT_RFC822;
msg->cm_fields['M'] = SmashStrBuf(&MsgData);
+ msg->cm_fields['U'] = strdup("QMSG");
Msg->MyQItem->QueMsgID =
CtdlSubmitMsg(msg, NULL, SMTP_SPOOLOUT_ROOM, QP_EADDR);
EVS_syslog(LOG_DEBUG, "SMTPQ: %ld", Msg->MyQItem->QueMsgID);
EVS_syslog(LOG_DEBUG, "SMTP: %s\n", __FUNCTION__);
+ pp = &Msg->Relay;
+ while ((pp != NULL) && (*pp != NULL) && ((*pp)->Next != NULL))
+ pp = &(*pp)->Next;
+
if ((IO->DNS.Query->DNSStatus == ARES_SUCCESS) &&
(IO->DNS.Query->VParsedDNSReply != NULL))
{ /* ok, we found mx records. */
p->Port = DefaultMXPort;
p->IPv6 = i == 1;
p->Host = Msg->CurrMX->host;
- if (Msg->Relay == NULL)
- Msg->Relay = p;
+ if (*pp == NULL)
+ *pp = p;
else {
- ParsedURL *pp = Msg->Relay;
-
- while ((pp->Next != NULL) &&
- (pp->Next->Priority <= p->Priority))
- pp = pp->Next;
- if ((pp == Msg->Relay) &&
- (pp->Priority > p->Priority)) {
- p->Next = Msg->Relay;
- Msg->Relay = p;
+ ParsedURL *ppp = *pp;
+
+ while ((ppp->Next != NULL) &&
+ (ppp->Next->Priority <= p->Priority))
+ ppp = ppp->Next;
+ if ((ppp == *pp) &&
+ (ppp->Priority > p->Priority)) {
+ p->Next = *pp;
+ *pp = p;
}
else {
- p->Next = pp->Next;
- pp->Next = p;
+ p->Next = ppp->Next;
+ ppp->Next = p;
}
}
}
Msg->CXFlags = Msg->CXFlags & F_HAVE_MX;
}
else { /* else fall back to the plain hostname */
- pp = &Msg->Relay;
- while ((pp != NULL) && (*pp != NULL) && ((*pp)->Next != NULL))
- pp = &(*pp)->Next;
int i;
for (i = 0; i < 2; i++) {
ParsedURL *p;
}
Msg->CXFlags = Msg->CXFlags & F_DIRECT;
}
- *pp = Msg->MyQItem->FallBackHost;
+ if (Msg->MyQItem->FallBackHost != NULL)
+ {
+ Msg->MyQItem->FallBackHost->Next = *pp;
+ *pp = Msg->MyQItem->FallBackHost;
+ }
Msg->pCurrRelay = Msg->Relay;
return get_one_mx_host_ip(IO);
}