summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Brown <julian.brown@cpanel.net>2015-03-15 13:36:54 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2015-03-15 14:16:07 +0000
commita39bd74d3e942db1b465cae643e1a4766ffb304e (patch)
tree00349023a92d73b46b53c0bc9a5226b8c459b9da
parent7eb6c37c5084760c1d1469bd4be652b479a8df55 (diff)
When trying spooled messages, account for the local-interface in grouping for a connection. Bug 1141
-rw-r--r--src/src/deliver.c16
-rw-r--r--src/src/functions.h5
-rw-r--r--src/src/ip.c88
-rw-r--r--src/src/structs.h3
-rw-r--r--src/src/transport.c173
-rw-r--r--src/src/transports/smtp.c87
-rw-r--r--test/confs/060360
-rw-r--r--test/confs/060459
-rw-r--r--test/log/060330
-rw-r--r--test/log/0604330
-rw-r--r--test/scripts/0000-Basic/060371
-rw-r--r--test/scripts/0000-Basic/0604667
-rw-r--r--test/stderr/06042
-rw-r--r--test/stdout/060331
-rw-r--r--test/stdout/0604406
15 files changed, 1942 insertions, 86 deletions
diff --git a/src/src/deliver.c b/src/src/deliver.c
index 65b4824ab..1cdecc6e9 100644
--- a/src/src/deliver.c
+++ b/src/src/deliver.c
@@ -7865,6 +7865,22 @@ if (!regex_IGNOREQUOTA) regex_IGNOREQUOTA =
}
+uschar *
+deliver_get_sender_address (uschar * id)
+{
+if (!spool_open_datafile(id))
+ return NULL;
+
+sprintf(CS spoolname, "%s-H", id);
+if (spool_read_header(spoolname, TRUE, TRUE) != spool_read_OK)
+ return NULL;
+
+(void)close(deliver_datafile);
+deliver_datafile = -1;
+
+return sender_address;
+}
+
/* vi: aw ai sw=2
*/
/* End of deliver.c */
diff --git a/src/src/functions.h b/src/src/functions.h
index df40d6456..7195afa88 100644
--- a/src/src/functions.h
+++ b/src/src/functions.h
@@ -133,6 +133,9 @@ extern void deliver_msglog(const char *, ...) PRINTF_FUNCTION(1,2);
extern void deliver_set_expansions(address_item *);
extern int deliver_split_address(address_item *);
extern void deliver_succeeded(address_item *);
+
+extern uschar *deliver_get_sender_address (uschar *id);
+
#ifdef WITH_OLD_DEMIME
extern int demime(uschar **);
#endif
@@ -424,7 +427,7 @@ extern uschar *tod_stamp(int);
extern void tls_modify_variables(tls_support *);
extern BOOL transport_check_waiting(const uschar *, const uschar *, int, uschar *,
- BOOL *);
+ BOOL *, oicf, void*);
extern void transport_init(void);
extern BOOL transport_pass_socket(const uschar *, const uschar *, const uschar *, uschar *,
int);
diff --git a/src/src/ip.c b/src/src/ip.c
index 83c8d167b..5b37e3898 100644
--- a/src/src/ip.c
+++ b/src/src/ip.c
@@ -228,14 +228,11 @@ alarm(0);
can't think of any other way of doing this. It converts a connection refused
into a timeout if the timeout is set to 999999. */
-if (running_in_test_harness)
+if (running_in_test_harness && save_errno == ECONNREFUSED && timeout == 999999)
{
- if (save_errno == ECONNREFUSED && timeout == 999999)
- {
- rc = -1;
- save_errno = EINTR;
- sigalrm_seen = TRUE;
- }
+ rc = -1;
+ save_errno = EINTR;
+ sigalrm_seen = TRUE;
}
/* Success */
@@ -245,7 +242,7 @@ if (rc >= 0) return 0;
/* A failure whose error code is "Interrupted system call" is in fact
an externally applied timeout if the signal handler has been run. */
-errno = (save_errno == EINTR && sigalrm_seen)? ETIMEDOUT : save_errno;
+errno = save_errno == EINTR && sigalrm_seen ? ETIMEDOUT : save_errno;
return -1;
}
@@ -360,53 +357,57 @@ bad:
int
ip_tcpsocket(const uschar * hostport, uschar ** errstr, int tmo)
{
- int scan;
- uschar hostname[256];
- unsigned int portlow, porthigh;
-
- /* extract host and port part */
- scan = sscanf(CS hostport, "%255s %u-%u", hostname, &portlow, &porthigh);
- if ( scan != 3 ) {
- if ( scan != 2 ) {
- *errstr = string_sprintf("invalid socket '%s'", hostport);
- return -1;
+int scan;
+uschar hostname[256];
+unsigned int portlow, porthigh;
+
+/* extract host and port part */
+scan = sscanf(CS hostport, "%255s %u-%u", hostname, &portlow, &porthigh);
+if (scan != 3)
+ {
+ if (scan != 2)
+ {
+ *errstr = string_sprintf("invalid socket '%s'", hostport);
+ return -1;
}
- porthigh = portlow;
+ porthigh = portlow;
}
- return ip_connectedsocket(SOCK_STREAM, hostname, portlow, porthigh,
- tmo, NULL, errstr);
+return ip_connectedsocket(SOCK_STREAM, hostname, portlow, porthigh,
+ tmo, NULL, errstr);
}
int
ip_unixsocket(const uschar * path, uschar ** errstr)
{
- int sock;
- struct sockaddr_un server;
+int sock;
+struct sockaddr_un server;
- if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
- *errstr = US"can't open UNIX socket.";
- return -1;
+if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
+ {
+ *errstr = US"can't open UNIX socket.";
+ return -1;
}
- server.sun_family = AF_UNIX;
- Ustrncpy(server.sun_path, path, sizeof(server.sun_path)-1);
- server.sun_path[sizeof(server.sun_path)-1] = '\0';
- if (connect(sock, (struct sockaddr *) &server, sizeof(server)) < 0) {
- int err = errno;
- (void)close(sock);
- *errstr = string_sprintf("unable to connect to UNIX socket (%s): %s",
- path, strerror(err));
- return -1;
- }
- return sock;
+server.sun_family = AF_UNIX;
+Ustrncpy(server.sun_path, path, sizeof(server.sun_path)-1);
+server.sun_path[sizeof(server.sun_path)-1] = '\0';
+if (connect(sock, (struct sockaddr *) &server, sizeof(server)) < 0)
+ {
+ int err = errno;
+ (void)close(sock);
+ *errstr = string_sprintf("unable to connect to UNIX socket (%s): %s",
+ path, strerror(err));
+ return -1;
+ }
+return sock;
}
int
ip_streamsocket(const uschar * spec, uschar ** errstr, int tmo)
{
- return *spec == '/'
- ? ip_unixsocket(spec, errstr) : ip_tcpsocket(spec, errstr, tmo);
+return *spec == '/'
+ ? ip_unixsocket(spec, errstr) : ip_tcpsocket(spec, errstr, tmo);
}
/*************************************************
@@ -461,7 +462,7 @@ if (timeout <= 0)
}
/* Wait until the socket is ready */
-for (;;)
+do
{
FD_ZERO (&select_inset);
FD_SET (fd, &select_inset);
@@ -497,9 +498,8 @@ for (;;)
}
/* If the socket is ready, break out of the loop. */
-
- if (FD_ISSET(fd, &select_inset)) break;
}
+while (!FD_ISSET(fd, &select_inset));
return TRUE;
}
@@ -702,13 +702,9 @@ while (last > first)
return TRUE;
}
else if (c > 0)
- {
first = middle + 1;
- }
else
- {
last = middle;
- }
}
return FALSE;
}
diff --git a/src/src/structs.h b/src/src/structs.h
index 85207b52f..6ec52e1ec 100644
--- a/src/src/structs.h
+++ b/src/src/structs.h
@@ -791,4 +791,7 @@ typedef struct acl_block {
int verb;
} acl_block;
+/* smtp transport calc outbound_ip */
+typedef BOOL (*oicf) (uschar *message_id, void *data);
+
/* End of structs.h */
diff --git a/src/src/transport.c b/src/src/transport.c
index fea914646..7b3d46908 100644
--- a/src/src/transport.c
+++ b/src/src/transport.c
@@ -1625,13 +1625,24 @@ Arguments:
as set by the caller transport
new_message_id set to the message id of a waiting message
more set TRUE if there are yet more messages waiting
+ oicf_func function to call to validate if it is ok to send
+ to this message_id from the current instance.
+ oicf_data opaque data for oicf_func
Returns: TRUE if new_message_id set; FALSE otherwise
*/
+typedef struct msgq_s msgq_t;
+
+typedef struct msgq_s
+{
+ uschar message_id [MESSAGE_ID_LENGTH + 1];
+ BOOL bKeep;
+} msgq_t;
+
BOOL
transport_check_waiting(const uschar *transport_name, const uschar *hostname,
- int local_message_max, uschar *new_message_id, BOOL *more)
+ int local_message_max, uschar *new_message_id, BOOL *more, oicf oicf_func, void *oicf_data)
{
dbdata_wait *host_record;
int host_length, path_len;
@@ -1639,6 +1650,16 @@ open_db dbblock;
open_db *dbm_file;
uschar buffer[256];
+msgq_t *msgq = NULL;
+int msgq_count = 0;
+int msgq_actual = 0;
+int i;
+BOOL bFound = FALSE;
+uschar spool_dir [PATH_MAX];
+uschar spool_file [PATH_MAX];
+struct stat statbuf;
+BOOL bContinuation = FALSE;
+
*more = FALSE;
DEBUG(D_transport)
@@ -1691,58 +1712,107 @@ until one is found for which a spool file actually exists. If the record gets
emptied, delete it and continue with any continuation records that may exist.
*/
-host_length = host_record->count * MESSAGE_ID_LENGTH;
+/* For Bug 1141, I refactored this major portion of the routine, it is risky
+but the 1 off will remain without it. This code now allows me to SKIP over
+a message I do not want to send out on this run. */
-/* Loop to handle continuation host records in the database */
+sprintf(CS spool_dir, "%s/input/", spool_directory);
-for (;;)
+host_length = host_record->count * MESSAGE_ID_LENGTH;
+
+while (1)
{
- BOOL found = FALSE;
+ /* create an array to read entire message queue into memory for processing */
- sprintf(CS buffer, "%s/input/", spool_directory);
- path_len = Ustrlen(buffer);
+ msgq = (msgq_t*) malloc(sizeof(msgq_t) * host_record->count);
+ msgq_count = host_record->count;
+ msgq_actual = msgq_count;
- for (host_length -= MESSAGE_ID_LENGTH; host_length >= 0;
- host_length -= MESSAGE_ID_LENGTH)
+ for (i = 0; i < host_record->count; ++i)
{
- struct stat statbuf;
- Ustrncpy(new_message_id, host_record->text + host_length,
+ msgq[i].bKeep = TRUE;
+
+ Ustrncpy(msgq[i].message_id, host_record->text + (i * MESSAGE_ID_LENGTH),
MESSAGE_ID_LENGTH);
- new_message_id[MESSAGE_ID_LENGTH] = 0;
+ msgq[i].message_id[MESSAGE_ID_LENGTH] = 0;
+ }
+
+ /* first thing remove current message id if it exists */
+ for (i = 0; i < msgq_count; ++i)
+ if (Ustrcmp(msgq[i].message_id, message_id) == 0)
+ {
+ msgq[i].bKeep = FALSE;
+ break;
+ }
+
+ /* now find the next acceptable message_id */
+
+ bFound = FALSE;
+
+ for (i = msgq_count - 1; i >= 0; --i) if (msgq[i].bKeep)
+ {
if (split_spool_directory)
- sprintf(CS(buffer + path_len), "%c/%s-D", new_message_id[5], new_message_id);
+ sprintf(CS spool_file, "%s%c/%s-D",
+ spool_dir, new_message_id[5], msgq[i].message_id);
else
- sprintf(CS(buffer + path_len), "%s-D", new_message_id);
+ sprintf(CS spool_file, "%s%s-D", spool_dir, msgq[i].message_id);
- /* The listed message may be the one we are currently processing. If
- so, we want to remove it from the list without doing anything else.
- If not, do a stat to see if it is an existing message. If it is, break
- the loop to handle it. No need to bother about locks; as this is all
- "hint" processing, it won't matter if it doesn't exist by the time exim
- actually tries to deliver it. */
-
- if (Ustrcmp(new_message_id, message_id) != 0 &&
- Ustat(buffer, &statbuf) == 0)
+ if (Ustat(spool_file, &statbuf) != 0)
+ msgq[i].bKeep = FALSE;
+ else if (!oicf_func || oicf_func(msgq[i].message_id, oicf_data))
{
- found = TRUE;
+ Ustrcpy(new_message_id, msgq[i].message_id);
+ msgq[i].bKeep = FALSE;
+ bFound = TRUE;
break;
}
}
- /* If we have removed all the message ids from the record delete the record.
- If there is a continuation record, fetch it and remove it from the file,
- as it will be rewritten as the main record. Repeat in the case of an
- empty continuation. */
+ /* re-count */
+ for (msgq_actual = 0, i = 0; i < msgq_count; ++i)
+ if (msgq[i].bKeep)
+ msgq_actual++;
+
+ /* reassemble the host record, based on removed message ids, from in
+ * memory queue.
+ */
+
+ if (msgq_actual <= 0)
+ {
+ host_length = 0;
+ host_record->count = 0;
+ }
+ else
+ {
+ host_length = msgq_actual * MESSAGE_ID_LENGTH;
+ host_record->count = msgq_actual;
+
+ if (msgq_actual < msgq_count)
+ {
+ int new_count;
+ for (new_count = 0, i = 0; i < msgq_count; ++i)
+ if (msgq[i].bKeep)
+ Ustrncpy(&host_record->text[new_count++ * MESSAGE_ID_LENGTH],
+ msgq[i].message_id, MESSAGE_ID_LENGTH);
+
+ host_record->text[new_count * MESSAGE_ID_LENGTH] = 0;
+ }
+ }
+
+/* Jeremy: check for a continuation record, this code I do not know how to
+test but the code should work */
+
+ bContinuation = FALSE;
while (host_length <= 0)
{
int i;
- dbdata_wait *newr = NULL;
+ dbdata_wait * newr = NULL;
/* Search for a continuation */
- for (i = host_record->sequence - 1; i >= 0 && newr == NULL; i--)
+ for (i = host_record->sequence - 1; i >= 0 && !newr; i--)
{
sprintf(CS buffer, "%.200s:%d", hostname, i);
newr = dbfn_read(dbm_file, buffer);
@@ -1750,7 +1820,7 @@ for (;;)
/* If no continuation, delete the current and break the loop */
- if (newr == NULL)
+ if (!newr)
{
dbfn_delete(dbm_file, hostname);
break;
@@ -1761,11 +1831,12 @@ for (;;)
dbfn_delete(dbm_file, buffer);
host_record = newr;
host_length = host_record->count * MESSAGE_ID_LENGTH;
- }
- /* If we found an existing message, break the continuation loop. */
+ bContinuation = TRUE;
+ }
- if (found) break;
+ if (bFound)
+ break;
/* If host_length <= 0 we have emptied a record and not found a good message,
and there are no continuation records. Otherwise there is a continuation
@@ -1777,6 +1848,26 @@ for (;;)
DEBUG(D_transport) debug_printf("waiting messages already delivered\n");
return FALSE;
}
+
+ /* we were not able to find an acceptable message, nor was there a
+ * continuation record. So bug out, outer logic will clean this up.
+ */
+
+ if (!bContinuation)
+ {
+ Ustrcpy (new_message_id, message_id);
+ dbfn_close(dbm_file);
+ return FALSE;
+ }
+ } /* we need to process a continuation record */
+
+/* clean up in memory queue */
+if (msgq)
+ {
+ free (msgq);
+ msgq = NULL;
+ msgq_count = 0;
+ msgq_actual = 0;
}
/* Control gets here when an existing message has been encountered; its
@@ -1786,7 +1877,19 @@ record if required, close the database, and return TRUE. */
if (host_length > 0)
{
+ uschar msg [MESSAGE_ID_LENGTH + 1];
+ int i;
+
host_record->count = host_length/MESSAGE_ID_LENGTH;
+
+ /* rebuild the host_record->text */
+
+ for (i = 0; i < host_record->count; ++i)
+ {
+ Ustrncpy(msg, host_record->text + (i*MESSAGE_ID_LENGTH), MESSAGE_ID_LENGTH);
+ msg[MESSAGE_ID_LENGTH] = 0;
+ }
+
dbfn_write(dbm_file, hostname, host_record, (int)sizeof(dbdata_wait) + host_length);
*more = TRUE;
}
@@ -1795,8 +1898,6 @@ dbfn_close(dbm_file);
return TRUE;
}
-
-
/*************************************************
* Deliver waiting message down same socket *
*************************************************/
diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c
index 11d7fdd12..446b3702b 100644
--- a/src/src/transports/smtp.c
+++ b/src/src/transports/smtp.c
@@ -700,8 +700,6 @@ router_name = transport_name = NULL;
}
#endif
-
-
/*************************************************
* Synchronize SMTP responses *
*************************************************/
@@ -1210,6 +1208,80 @@ return OK;
#endif
+
+typedef struct smtp_compare_s
+{
+ uschar *current_sender_address;
+ struct transport_instance *tblock;
+} smtp_compare_t;
+
+/*
+Create a unique string that identifies this message, it is based on
+sender_address, helo_data and tls_certificate if enabled. */
+
+static uschar *
+smtp_local_identity(uschar * sender, struct transport_instance * tblock)
+{
+address_item * addr1;
+uschar * if1 = US"";
+uschar * helo1 = US"";
+#ifdef SUPPORT_TLS
+uschar * tlsc1 = US"";
+#endif
+uschar * save_sender_address = sender_address;
+uschar * local_identity = NULL;
+smtp_transport_options_block * ob =
+ (smtp_transport_options_block *)tblock->options_block;
+
+sender_address = sender;
+
+addr1 = deliver_make_addr (sender, TRUE);
+deliver_set_expansions(addr1);
+
+if (ob->interface)
+ if1 = expand_string(ob->interface);
+
+if (ob->helo_data)
+ helo1 = expand_string(ob->helo_data);
+
+#ifdef SUPPORT_TLS
+if (ob->tls_certificate)
+ tlsc1 = expand_string(ob->tls_certificate);
+local_identity = string_sprintf ("%s^%s^%s", if1, helo1, tlsc1);
+#else
+local_identity = string_sprintf ("%s^%s", if1, helo1);
+#endif
+
+deliver_set_expansions(NULL);
+sender_address = save_sender_address;
+
+return local_identity;
+}
+
+
+
+/* This routine is a callback that is called from transport_check_waiting.
+This function will evaluate the incoming message versus the previous
+message. If the incoming message is using a different local identity then
+we will veto this new message. */
+
+static BOOL
+smtp_are_same_identities(uschar * message_id, smtp_compare_t * s_compare)
+{
+uschar * save_sender_address = sender_address;
+uschar * current_local_identity =
+ smtp_local_identity(s_compare->current_sender_address, s_compare->tblock);
+uschar * new_sender_address = deliver_get_sender_address(message_id);
+uschar * message_local_identity =
+ smtp_local_identity(new_sender_address, s_compare->tblock);
+
+sender_address = save_sender_address;
+
+return Ustrcmp(current_local_identity, message_local_identity) == 0;
+}
+
+
+
/*************************************************
* Deliver address list to given host *
*************************************************/
@@ -1293,13 +1365,16 @@ smtp_inblock inblock;
smtp_outblock outblock;
int max_rcpt = tblock->max_addresses;
uschar *igquotstr = US"";
+
uschar *helo_data = NULL;
+
uschar *message = NULL;
uschar new_message_id[MESSAGE_ID_LENGTH + 1];
uschar *p;
uschar buffer[4096];
uschar inbuffer[4096];
uschar outbuffer[4096];
+address_item * current_address;
suppress_tls = suppress_tls; /* stop compiler warning when no TLS support */
@@ -2520,6 +2595,11 @@ DEBUG(D_transport)
if (completed_address && ok && send_quit)
{
BOOL more;
+ smtp_compare_t t_compare;
+
+ t_compare.tblock = tblock;
+ t_compare.current_sender_address = sender_address;
+
if ( first_addr != NULL
|| continue_more
|| ( ( tls_out.active < 0
@@ -2527,7 +2607,8 @@ if (completed_address && ok && send_quit)
)
&&
transport_check_waiting(tblock->name, host->name,
- tblock->connection_max_messages, new_message_id, &more)
+ tblock->connection_max_messages, new_message_id, &more,
+ (oicf)smtp_are_same_identities, (void*)&t_compare)
) )
{
uschar *msg;
diff --git a/test/confs/0603 b/test/confs/0603
new file mode 100644
index 000000000..bc84cc0d1
--- /dev/null
+++ b/test/confs/0603
@@ -0,0 +1,60 @@
+# Exim test configuration 0603
+# Add several messages going to the same location
+# And change smtp output based on senders domain
+
+hostlist loopback = <; 127.0.0.0/8 ; 0.0.0.0 ; ::1 ; 0000:0000:0000:0000:0000:ffff
+untrusted_set_sender = *
+
+SERVER =
+
+exim_path = EXIM_PATH
+host_lookup_order = bydns
+#primary_hostname = myhost.test.ex
+rfc1413_query_timeout = 0s
+spool_directory = DIR/spool
+log_file_path = DIR/spool/log/SERVER%slog
+log_selector = +sender_on_delivery
+gecos_pattern = ""
+gecos_name = CALLER_NAME
+
+# ----- Main settings -----
+
+acl_smtp_rcpt = accept
+
+queue_only
+queue_run_in_order
+
+# ----- Routers -----
+
+begin routers
+
+client:
+ driver = accept
+ condition = ${if eq {SERVER}{server}{no}{yes}}
+ transport = send_to_server
+
+server:
+ driver = accept
+ transport = send_to_server
+
+
+# ----- Transports -----
+
+begin transports
+
+send_to_server:
+ driver = smtp
+ connection_max_messages = 0
+ allow_localhost
+ hosts = 127.0.0.1
+ port = PORT_D
+ interface = ${if eq {$sender_address_domain}{dustybelt.tld} {127.0.0.1}{127.0.0.2}}
+
+# ----- Retry -----
+
+begin retry
+
+* * F,5d,10s
+
+# End
+
diff --git a/test/confs/0604 b/test/confs/0604
new file mode 100644
index 000000000..77376cdcd
--- /dev/null
+++ b/test/confs/0604
@@ -0,0 +1,59 @@
+# Exim test configuration 0604
+# Send many messages in hopes of tripping continuation records code
+
+hostlist loopback = <; 127.0.0.0/8 ; 0.0.0.0 ; ::1 ; 0000:0000:0000:0000:0000:ffff
+untrusted_set_sender = *
+
+SERVER =
+
+exim_path = EXIM_PATH
+host_lookup_order = bydns
+#primary_hostname = myhost.test.ex
+rfc1413_query_timeout = 0s
+spool_directory = DIR/spool
+log_file_path = DIR/spool/log/SERVER%slog
+log_selector = +sender_on_delivery
+gecos_pattern = ""
+gecos_name = CALLER_NAME
+
+# ----- Main settings -----
+
+acl_smtp_rcpt = accept
+
+queue_only
+queue_run_in_order
+
+# ----- Routers -----
+
+begin routers
+
+client:
+ driver = accept
+ condition = ${if eq {SERVER}{server}{no}{yes}}
+ transport = send_to_server
+
+server:
+ driver = accept
+ transport = send_to_server
+
+
+# ----- Transports -----
+
+begin transports
+
+send_to_server:
+ driver = smtp
+ connection_max_messages = 0
+ allow_localhost
+ hosts = 127.0.0.1
+ port = PORT_D
+ interface = ${if eq {$sender_address_domain}{dustybelt.tld} {127.0.0.1}{127.0.0.2}}
+
+# ----- Retry -----
+
+begin retry
+
+* * F,5d,10s
+
+# End
+
diff --git a/test/log/0603 b/test/log/0603
new file mode 100644
index 000000000..d8ca112c1
--- /dev/null
+++ b/test/log/0603
@@ -0,0 +1,30 @@
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= peter@dustybelt.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbA-0005vi-00 <= peter@dustybelt.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbB-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbC-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 Start queue run: pid=pppp -qq
+1999-03-02 09:44:33 10HmaX-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmbD-0005vi-00"
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbC-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbE-0005vi-00"
+1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbB-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbF-0005vi-00"
+1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbG-0005vi-00"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaY-0005vi-00 => bob@anotherone.tld F=<peter@dustybelt.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmbH-0005vi-00"
+1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbA-0005vi-00 => bob@anotherone.tld F=<peter@dustybelt.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmbI-0005vi-00"
+1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
+1999-03-02 09:44:33 End queue run: pid=pppp -qq
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225
+1999-03-02 09:44:33 no host name found for IP address 127.0.0.2
+1999-03-02 09:44:33 10HmbD-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmaX-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmbE-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbC-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmbF-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbB-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmbG-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmaZ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmbH-0005vi-00 <= peter@dustybelt.tld H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmaY-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmbI-0005vi-00 <= peter@dustybelt.tld H=localhost (the.local.host.name) [127.0.0.1] P=esmtp S=sss id=E10HmbA-0005vi-00@the.local.host.name
diff --git a/test/log/0604 b/test/log/0604
new file mode 100644
index 000000000..b72c16983
--- /dev/null
+++ b/test/log/0604
@@ -0,0 +1,330 @@
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbA-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbB-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbC-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbD-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbE-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbF-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbG-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbH-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbI-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbJ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbK-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbL-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbM-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbN-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbO-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbP-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbQ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbR-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbS-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbT-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbU-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbV-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbW-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbX-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbY-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbZ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcA-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcB-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcC-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcD-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcE-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcF-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcG-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcH-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcI-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcJ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcK-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcL-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcM-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcN-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcO-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcP-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcQ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcR-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcS-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcT-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcU-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcV-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcW-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcX-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcY-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmcZ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdA-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdB-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdC-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdD-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdE-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdF-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdG-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdH-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdI-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdJ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdK-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdL-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdM-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdN-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdO-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdP-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdQ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdR-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdS-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdT-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdU-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdV-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdW-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdX-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdY-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmdZ-0005vi-00 <= ralph@dustyshoes.tld U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 Start queue run: pid=pppp -qq
+1999-03-02 09:44:33 10HmaX-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmeA-0005vi-00"
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdZ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeB-0005vi-00"
+1999-03-02 09:44:33 10HmdZ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdY-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeC-0005vi-00"
+1999-03-02 09:44:33 10HmdY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdX-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeD-0005vi-00"
+1999-03-02 09:44:33 10HmdX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdW-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeE-0005vi-00"
+1999-03-02 09:44:33 10HmdW-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdV-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeF-0005vi-00"
+1999-03-02 09:44:33 10HmdV-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdU-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeG-0005vi-00"
+1999-03-02 09:44:33 10HmdU-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdT-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeH-0005vi-00"
+1999-03-02 09:44:33 10HmdT-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdS-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeI-0005vi-00"
+1999-03-02 09:44:33 10HmdS-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdR-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeJ-0005vi-00"
+1999-03-02 09:44:33 10HmdR-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdQ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeK-0005vi-00"
+1999-03-02 09:44:33 10HmdQ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdP-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeL-0005vi-00"
+1999-03-02 09:44:33 10HmdP-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdO-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeM-0005vi-00"
+1999-03-02 09:44:33 10HmdO-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdN-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeN-0005vi-00"
+1999-03-02 09:44:33 10HmdN-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdM-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeO-0005vi-00"
+1999-03-02 09:44:33 10HmdM-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdL-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeP-0005vi-00"
+1999-03-02 09:44:33 10HmdL-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdK-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeQ-0005vi-00"
+1999-03-02 09:44:33 10HmdK-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdJ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeR-0005vi-00"
+1999-03-02 09:44:33 10HmdJ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdI-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeS-0005vi-00"
+1999-03-02 09:44:33 10HmdI-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdH-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeT-0005vi-00"
+1999-03-02 09:44:33 10HmdH-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdG-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeU-0005vi-00"
+1999-03-02 09:44:33 10HmdG-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdF-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeV-0005vi-00"
+1999-03-02 09:44:33 10HmdF-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdE-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeW-0005vi-00"
+1999-03-02 09:44:33 10HmdE-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdD-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeX-0005vi-00"
+1999-03-02 09:44:33 10HmdD-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdC-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeY-0005vi-00"
+1999-03-02 09:44:33 10HmdC-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdB-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmeZ-0005vi-00"
+1999-03-02 09:44:33 10HmdB-0005vi-00 Completed
+1999-03-02 09:44:33 10HmdA-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfA-0005vi-00"
+1999-03-02 09:44:33 10HmdA-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcZ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfB-0005vi-00"
+1999-03-02 09:44:33 10HmcZ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcY-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfC-0005vi-00"
+1999-03-02 09:44:33 10HmcY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcX-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfD-0005vi-00"
+1999-03-02 09:44:33 10HmcX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcW-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfE-0005vi-00"
+1999-03-02 09:44:33 10HmcW-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcV-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfF-0005vi-00"
+1999-03-02 09:44:33 10HmcV-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcU-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfG-0005vi-00"
+1999-03-02 09:44:33 10HmcU-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcT-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfH-0005vi-00"
+1999-03-02 09:44:33 10HmcT-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcS-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfI-0005vi-00"
+1999-03-02 09:44:33 10HmcS-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcR-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfJ-0005vi-00"
+1999-03-02 09:44:33 10HmcR-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcQ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfK-0005vi-00"
+1999-03-02 09:44:33 10HmcQ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcP-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfL-0005vi-00"
+1999-03-02 09:44:33 10HmcP-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcO-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfM-0005vi-00"
+1999-03-02 09:44:33 10HmcO-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcN-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfN-0005vi-00"
+1999-03-02 09:44:33 10HmcN-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcM-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfO-0005vi-00"
+1999-03-02 09:44:33 10HmcM-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcL-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfP-0005vi-00"
+1999-03-02 09:44:33 10HmcL-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcK-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfQ-0005vi-00"
+1999-03-02 09:44:33 10HmcK-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcJ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfR-0005vi-00"
+1999-03-02 09:44:33 10HmcJ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcI-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfS-0005vi-00"
+1999-03-02 09:44:33 10HmcI-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcH-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfT-0005vi-00"
+1999-03-02 09:44:33 10HmcH-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcG-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfU-0005vi-00"
+1999-03-02 09:44:33 10HmcG-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcF-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfV-0005vi-00"
+1999-03-02 09:44:33 10HmcF-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcE-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfW-0005vi-00"
+1999-03-02 09:44:33 10HmcE-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcD-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfX-0005vi-00"
+1999-03-02 09:44:33 10HmcD-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcC-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfY-0005vi-00"
+1999-03-02 09:44:33 10HmcC-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcB-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmfZ-0005vi-00"
+1999-03-02 09:44:33 10HmcB-0005vi-00 Completed
+1999-03-02 09:44:33 10HmcA-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgA-0005vi-00"
+1999-03-02 09:44:33 10HmcA-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbZ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgB-0005vi-00"
+1999-03-02 09:44:33 10HmbZ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbY-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgC-0005vi-00"
+1999-03-02 09:44:33 10HmbY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbX-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgD-0005vi-00"
+1999-03-02 09:44:33 10HmbX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbW-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgE-0005vi-00"
+1999-03-02 09:44:33 10HmbW-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbV-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgF-0005vi-00"
+1999-03-02 09:44:33 10HmbV-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbU-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgG-0005vi-00"
+1999-03-02 09:44:33 10HmbU-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbT-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgH-0005vi-00"
+1999-03-02 09:44:33 10HmbT-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbS-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgI-0005vi-00"
+1999-03-02 09:44:33 10HmbS-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbR-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgJ-0005vi-00"
+1999-03-02 09:44:33 10HmbR-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbQ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgK-0005vi-00"
+1999-03-02 09:44:33 10HmbQ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbP-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgL-0005vi-00"
+1999-03-02 09:44:33 10HmbP-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbO-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgM-0005vi-00"
+1999-03-02 09:44:33 10HmbO-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbN-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgN-0005vi-00"
+1999-03-02 09:44:33 10HmbN-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbM-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgO-0005vi-00"
+1999-03-02 09:44:33 10HmbM-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbL-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgP-0005vi-00"
+1999-03-02 09:44:33 10HmbL-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbK-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgQ-0005vi-00"
+1999-03-02 09:44:33 10HmbK-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbJ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgR-0005vi-00"
+1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbI-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgS-0005vi-00"
+1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbH-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgT-0005vi-00"
+1999-03-02 09:44:33 10HmbH-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbG-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgU-0005vi-00"
+1999-03-02 09:44:33 10HmbG-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbF-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgV-0005vi-00"
+1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbE-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgW-0005vi-00"
+1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbD-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgX-0005vi-00"
+1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbC-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgY-0005vi-00"
+1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbB-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmgZ-0005vi-00"
+1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbA-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhA-0005vi-00"
+1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhB-0005vi-00"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaY-0005vi-00 => bob@anotherone.tld F=<ralph@dustyshoes.tld> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK id=10HmhC-0005vi-00"
+1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
+1999-03-02 09:44:33 End queue run: pid=pppp -qq
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225
+1999-03-02 09:44:33 no host name found for IP address 127.0.0.2
+1999-03-02 09:44:33 10HmeA-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmaX-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeB-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdZ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeC-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdY-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeD-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdX-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeE-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdW-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeF-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdV-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeG-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdU-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeH-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdT-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeI-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdS-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeJ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdR-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeK-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdQ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeL-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdP-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeM-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdO-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeN-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdN-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeO-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdM-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeP-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdL-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeQ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdK-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeR-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdJ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeS-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdI-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeT-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdH-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeU-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdG-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeV-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdF-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeW-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdE-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeX-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdD-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeY-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdC-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmeZ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdB-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfA-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmdA-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfB-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcZ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfC-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcY-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfD-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcX-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfE-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcW-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfF-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcV-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfG-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcU-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfH-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcT-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfI-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcS-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfJ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcR-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfK-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcQ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfL-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcP-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfM-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcO-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfN-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcN-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfO-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcM-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfP-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcL-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfQ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcK-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfR-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcJ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfS-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcI-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfT-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcH-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfU-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcG-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfV-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcF-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfW-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcE-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfX-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcD-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfY-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcC-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmfZ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcB-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgA-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmcA-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgB-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbZ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgC-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbY-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgD-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbX-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgE-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbW-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgF-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbV-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgG-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbU-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgH-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbT-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgI-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbS-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgJ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbR-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgK-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbQ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgL-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbP-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgM-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbO-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgN-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbN-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgO-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbM-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgP-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbL-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgQ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbK-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgR-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbJ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgS-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbI-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgT-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbH-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgU-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbG-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgV-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbF-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgW-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbE-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgX-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbD-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgY-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbC-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmgZ-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbB-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmhA-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmbA-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmhB-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmaZ-0005vi-00@the.local.host.name
+1999-03-02 09:44:33 10HmhC-0005vi-00 <= ralph@dustyshoes.tld H=(the.local.host.name) [127.0.0.2] P=esmtp S=sss id=E10HmaY-0005vi-00@the.local.host.name
diff --git a/test/scripts/0000-Basic/0603 b/test/scripts/0000-Basic/0603
new file mode 100644
index 000000000..38e374a1f
--- /dev/null
+++ b/test/scripts/0000-Basic/0603
@@ -0,0 +1,71 @@
+# retry: transport identity depending on sender
+# Exim test configuration 0603
+#
+# Add several messages going to the same location
+# And change smtp output based on senders domain
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+exim -bs
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+This is a test message.
+It has three lines.
+This is the last line.
+.
+RSET
+mail from:peter@dustybelt.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: second
+
+This is a second test message.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: third
+Reply-to: some@body
+
+This is a third test message.
+.
+RSET
+mail from:peter@dustybelt.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: secondA
+
+This is a secondA test message.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: third
+Reply-to: some@body
+
+This is a fourth test message.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: third
+Reply-to: some@body
+
+This is a fifth test message.
+.
+quit
+****
+#
+#
+exim -qq
+****
+#
+#
+killdaemon
+no_msglog_check
+
diff --git a/test/scripts/0000-Basic/0604 b/test/scripts/0000-Basic/0604
new file mode 100644
index 000000000..a24d194fa
--- /dev/null
+++ b/test/scripts/0000-Basic/0604
@@ -0,0 +1,667 @@
+# retry: database continuation record
+# Exim test configuration 0604
+#
+echo Note this takes 3 minutes to run
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+exim -bs
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+This is a test message.
+It has three lines.
+This is the last line.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 1
+
+This is message number 1.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 2
+
+This is message number 2.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 3
+
+This is message number 3.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 4
+
+This is message number 4.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 5
+
+This is message number 5.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 6
+
+This is message number 6.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 7
+
+This is message number 7.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 8
+
+This is message number 8.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 9
+
+This is message number 9.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 10
+
+This is message number 10.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 11
+
+This is message number 11.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 12
+
+This is message number 12.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 13
+
+This is message number 13.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 14
+
+This is message number 14.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 15
+
+This is message number 15.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 16
+
+This is message number 16.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 17
+
+This is message number 17.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 18
+
+This is message number 18.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 19
+
+This is message number 19.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 20
+
+This is message number 20.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 21
+
+This is message number 21.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 22
+
+This is message number 22.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 23
+
+This is message number 23.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 24
+
+This is message number 24.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 25
+
+This is message number 25.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 26
+
+This is message number 26.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 27
+
+This is message number 27.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 28
+
+This is message number 28.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 29
+
+This is message number 29.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 30
+
+This is message number 30.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 31
+
+This is message number 31.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 32
+
+This is message number 32.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 33
+
+This is message number 33.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 34
+
+This is message number 34.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 35
+
+This is message number 35.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 36
+
+This is message number 36.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 37
+
+This is message number 37.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 38
+
+This is message number 38.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 39
+
+This is message number 39.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 40
+
+This is message number 40.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 41
+
+This is message number 41.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 42
+
+This is message number 42.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 43
+
+This is message number 43.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 44
+
+This is message number 44.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 45
+
+This is message number 45.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 46
+
+This is message number 46.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 47
+
+This is message number 47.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 48
+
+This is message number 48.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 49
+
+This is message number 49.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 50
+
+This is message number 50.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 51
+
+This is message number 51.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 52
+
+This is message number 52.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 53
+
+This is message number 53.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 54
+
+This is message number 54.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 55
+
+This is message number 55.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 56
+
+This is message number 56.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 57
+
+This is message number 57.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 58
+
+This is message number 58.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 59
+
+This is message number 59.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 60
+
+This is message number 60.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 61
+
+This is message number 61.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 62
+
+This is message number 62.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 63
+
+This is message number 63.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 64
+
+This is message number 64.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 65
+
+This is message number 65.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 66
+
+This is message number 66.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 67
+
+This is message number 67.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 68
+
+This is message number 68.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 69
+
+This is message number 69.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 70
+
+This is message number 70.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 71
+
+This is message number 71.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 72
+
+This is message number 72.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 73
+
+This is message number 73.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 74
+
+This is message number 74.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 75
+
+This is message number 75.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 76
+
+This is message number 76.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 77
+
+This is message number 77.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 78
+
+This is message number 78.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 79
+
+This is message number 79.
+.
+RSET
+mail from:ralph@dustyshoes.tld
+rcpt to:bob@anotherone.tld
+data
+Subject: message_id 80
+
+This is message number 80.
+.
+quit
+****
+#
+#
+exim -qq
+****
+#
+#
+killdaemon
+no_msglog_check
+
diff --git a/test/stderr/0604 b/test/stderr/0604
new file mode 100644
index 000000000..045fadc9b
--- /dev/null
+++ b/test/stderr/0604
@@ -0,0 +1,2 @@
+
+******** SERVER ********
diff --git a/test/stdout/0603 b/test/stdout/0603
new file mode 100644
index 000000000..ee9b665a1
--- /dev/null
+++ b/test/stdout/0603
@@ -0,0 +1,31 @@
+220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaX-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaY-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaZ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbA-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbB-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbC-0005vi-00
+221 the.local.host.name closing connection
diff --git a/test/stdout/0604 b/test/stdout/0604
new file mode 100644
index 000000000..a6da43d1d
--- /dev/null
+++ b/test/stdout/0604
@@ -0,0 +1,406 @@
+220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaX-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaY-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaZ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbA-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbB-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbC-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbD-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbE-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbF-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbG-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbH-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbI-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbJ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbK-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbL-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbM-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbN-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbO-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbP-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbQ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbR-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbS-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbT-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbU-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbV-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbW-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbX-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbY-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbZ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcA-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcB-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcC-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcD-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcE-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcF-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcG-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcH-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcI-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcJ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcK-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcL-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcM-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcN-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcO-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcP-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcQ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcR-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcS-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcT-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcU-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcV-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcW-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcX-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcY-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmcZ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdA-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdB-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdC-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdD-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdE-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdF-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdG-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdH-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdI-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdJ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdK-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdL-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdM-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdN-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdO-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdP-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdQ-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdR-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdS-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdT-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdU-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdV-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdW-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdX-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdY-0005vi-00
+250 Reset OK
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmdZ-0005vi-00
+221 the.local.host.name closing connection