+ if ((Msg->nRemain > 0) || Msg->IDestructQueItem)
+ Msg->QMsgData = SerializeQueueItem(Msg->MyQItem);
+ else
+ Msg->QMsgData = NULL;
+
+ /*
+ * Uncompleted delivery instructions remain, so delete the old
+ * instructions and replace with the updated ones.
+ */
+ EVS_syslog(LOG_DEBUG, "%ld", Msg->MyQItem->QueMsgID);
+ CtdlDeleteMessages(SMTP_SPOOLOUT_ROOM, &Msg->MyQItem->QueMsgID, 1, "");
+ Msg->MyQItem->QueMsgID = -1;
+
+ if (Msg->IDestructQueItem)
+ smtpq_do_bounce(Msg->MyQItem, Msg->msgtext);
+
+ if (Msg->nRemain > 0)
+ {
+ struct CtdlMessage *msg;
+ msg = malloc(sizeof(struct CtdlMessage));
+ memset(msg, 0, sizeof(struct CtdlMessage));
+ msg->cm_magic = CTDLMESSAGE_MAGIC;
+ msg->cm_anon_type = MES_NORMAL;
+ msg->cm_format_type = FMT_RFC822;
+ msg->cm_fields['M'] = SmashStrBuf(&Msg->QMsgData);
+ msg->cm_fields['U'] = strdup("QMSG");
+ Msg->MyQItem->QueMsgID =
+ CtdlSubmitMsg(msg, NULL, SMTP_SPOOLOUT_ROOM, QP_EADDR);
+ EVS_syslog(LOG_DEBUG, "%ld", Msg->MyQItem->QueMsgID);
+ CtdlFreeMessage(msg);
+ }
+ else {
+ CtdlDeleteMessages(SMTP_SPOOLOUT_ROOM,
+ &Msg->MyQItem->MessageID,
+ 1,
+ "");
+ FreeStrBuf(&Msg->QMsgData);