From c4639661040515feaa187921d47580b767f7c3b1 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sun, 22 Dec 2019 19:53:39 +0000 Subject: [PATCH 1/1] PIPELINING: break and check for 452 every hundred RCPTs --- doc/doc-txt/ChangeLog | 8 + src/src/transports/smtp.c | 183 ++++++++++-------- src/src/transports/smtp.h | 1 + test/confs/0217 | 2 +- test/log/0217 | 103 ++++++++++ test/scripts/0000-Basic/0217 | 338 +++++++++++++++++++++++++++++++++ test/stderr/0217 | 202 ++++++++++---------- test/stdout/0217 | 354 +++++++++++++++++++++++++++++++++++ 8 files changed, 1013 insertions(+), 178 deletions(-) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index e200c5291..528021268 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -58,6 +58,14 @@ JH/14 Bug 2500: Rewind some of the common-coding in string handling between the tracking also did many adjustments to string handling. Since then, eximon frequently terminated with an assert failure. +JH/15 When PIPELINING, synch after every hundred or so RCPT commands sent and + check for 452 responses. This slightly helps the inefficieny of doing + a large alias-expansion into a recipient-limited target. The max_rcpt + transport option still applies (and at the current default, will override + the new feature). The check is done for either cause of synch, and forces + a fast-retry of all 452'd recipients using a new MAIL FROM on the same + connection. The new facility is not tunable at this time. + Exim version 4.93 ----------------- diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index 92723a2c1..7428134d4 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -1150,6 +1150,7 @@ if (sx->pending_MAIL) { DEBUG(D_transport) debug_printf("%s expect mail\n", __FUNCTION__); count--; + sx->pending_MAIL = FALSE; if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', ob->command_timeout)) { @@ -1284,38 +1285,55 @@ while (count-- > 0) event_defer_errno = addr->more_errno; msg_event_raise(US"msg:rcpt:host:defer", addr); #endif + /* If a 452 and we've had at least one 2xx or 5xx, set next_addr to the + start point for another MAIL command. */ - /* Log temporary errors if there are more hosts to be tried. - If not, log this last one in the == line. */ - - if (sx->conn_args.host->next) - if (LOGGING(outgoing_port)) - log_write(0, LOG_MAIN, "H=%s [%s]:%d %s", sx->conn_args.host->name, - sx->conn_args.host->address, - sx->port == PORT_NONE ? 25 : sx->port, addr->message); - else - log_write(0, LOG_MAIN, "H=%s [%s]: %s", sx->conn_args.host->name, - sx->conn_args.host->address, addr->message); + if (addr->more_errno >> 8 == 52 && yield & 3) + { + if (!sx->RCPT_452) + { + DEBUG(D_transport) + debug_printf("%s: seen first 452 too-many-rcpts\n", __FUNCTION__); + sx->RCPT_452 = TRUE; + sx->next_addr = addr; + } + addr->transport_return = PENDING_DEFER; + addr->basic_errno = 0; + } + else + { + /* Log temporary errors if there are more hosts to be tried. + If not, log this last one in the == line. */ + + if (sx->conn_args.host->next) + if (LOGGING(outgoing_port)) + log_write(0, LOG_MAIN, "H=%s [%s]:%d %s", sx->conn_args.host->name, + sx->conn_args.host->address, + sx->port == PORT_NONE ? 25 : sx->port, addr->message); + else + log_write(0, LOG_MAIN, "H=%s [%s]: %s", sx->conn_args.host->name, + sx->conn_args.host->address, addr->message); #ifndef DISABLE_EVENT - else - msg_event_raise(US"msg:rcpt:defer", addr); + else + msg_event_raise(US"msg:rcpt:defer", addr); #endif - /* Do not put this message on the list of those waiting for specific - hosts, as otherwise it is likely to be tried too often. */ + /* Do not put this message on the list of those waiting for specific + hosts, as otherwise it is likely to be tried too often. */ - update_waiting = FALSE; + update_waiting = FALSE; - /* Add a retry item for the address so that it doesn't get tried again - too soon. If address_retry_include_sender is true, add the sender address - to the retry key. */ + /* Add a retry item for the address so that it doesn't get tried again + too soon. If address_retry_include_sender is true, add the sender address + to the retry key. */ - retry_add_item(addr, - ob->address_retry_include_sender - ? string_sprintf("%s:<%s>", addr->address_retry_key, sender_address) - : addr->address_retry_key, - 0); + retry_add_item(addr, + ob->address_retry_include_sender + ? string_sprintf("%s:<%s>", addr->address_retry_key, sender_address) + : addr->address_retry_key, + 0); + } } } } @@ -3128,7 +3146,7 @@ int smtp_write_mail_and_rcpt_cmds(smtp_context * sx, int * yield) { address_item * addr; -int address_count; +int address_count, pipe_limit; int rc; if (build_mailcmd_options(sx, sx->first_addr) != OK) @@ -3211,11 +3229,11 @@ that max_rcpt will be large, so all addresses will be done at once. For verify we flush the pipeline after any (the only) rcpt address. */ -for (addr = sx->first_addr, address_count = 0; +for (addr = sx->first_addr, address_count = 0, pipe_limit = 100; addr && address_count < sx->max_rcpt; addr = addr->next) if (addr->transport_return == PENDING_DEFER) { - int count; + int cmds_sent; BOOL no_flush; uschar * rcpt_addr; @@ -3223,7 +3241,10 @@ for (addr = sx->first_addr, address_count = 0; ? dsn_support_yes : dsn_support_no; address_count++; - no_flush = pipelining_active && !sx->verify + if (pipe_limit-- <= 0) + { no_flush = FALSE; pipe_limit = 100; } + else + no_flush = pipelining_active && !sx->verify && (!mua_wrapper || addr->next && address_count < sx->max_rcpt); build_rcptcmd_options(sx, addr); @@ -3246,13 +3267,13 @@ for (addr = sx->first_addr, address_count = 0; } #endif - count = smtp_write_command(sx, no_flush ? SCMD_BUFFER : SCMD_FLUSH, + cmds_sent = smtp_write_command(sx, no_flush ? SCMD_BUFFER : SCMD_FLUSH, "RCPT TO:<%s>%s%s\r\n", rcpt_addr, sx->igquotstr, sx->buffer); - if (count < 0) return -5; - if (count > 0) + if (cmds_sent < 0) return -5; + if (cmds_sent > 0) { - switch(sync_responses(sx, count, 0)) + switch(sync_responses(sx, cmds_sent, 0)) { case 3: sx->ok = TRUE; /* 2xx & 5xx => OK & progress made */ case 2: sx->completed_addr = TRUE; /* 5xx (only) => progress made */ @@ -3262,6 +3283,17 @@ for (addr = sx->first_addr, address_count = 0; if (!sx->lmtp) /* can't tell about progress yet */ sx->completed_addr = TRUE; case 0: /* No 2xx or 5xx, but no probs */ + /* If any RCPT got a 452 response then next_addr has been updated + for restarting with a new MAIL on the same connection. Send no more + RCPTs for this MAIL. */ + + if (sx->RCPT_452) + { + DEBUG(D_transport) debug_printf("seen 452 too-many-rcpts\n"); + sx->RCPT_452 = FALSE; + /* sx->next_addr has been reset for fast_retry */ + return 0; + } break; case -1: return -3; /* Timeout on RCPT */ @@ -3273,7 +3305,6 @@ for (addr = sx->first_addr, address_count = 0; case -5: return -1; /* TLS first-read error */ #endif } - sx->pending_MAIL = FALSE; /* Dealt with MAIL */ } } /* Loop for next address */ @@ -3947,53 +3978,53 @@ else } #ifndef DISABLE_PRDR - if (sx->prdr_active) - { - const uschar * overall_message; + if (sx->prdr_active) + { + const uschar * overall_message; - /* PRDR - get the final, overall response. For any non-success - upgrade all the address statuses. */ + /* PRDR - get the final, overall response. For any non-success + upgrade all the address statuses. */ - sx->ok = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', - ob->final_timeout); - if (!sx->ok) + sx->ok = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', + ob->final_timeout); + if (!sx->ok) + { + if(errno == 0 && sx->buffer[0] == '4') { - if(errno == 0 && sx->buffer[0] == '4') - { - errno = ERRNO_DATA4XX; - addrlist->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8; - } - for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next) - if (sx->buffer[0] == '5' || addr->transport_return == OK) - addr->transport_return = PENDING_OK; /* allow set_errno action */ - goto RESPONSE_FAILED; + errno = ERRNO_DATA4XX; + addrlist->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8; } + for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next) + if (sx->buffer[0] == '5' || addr->transport_return == OK) + addr->transport_return = PENDING_OK; /* allow set_errno action */ + goto RESPONSE_FAILED; + } - /* Append the overall response to the individual PRDR response for logging - and update the journal, or setup retry. */ + /* Append the overall response to the individual PRDR response for logging + and update the journal, or setup retry. */ - overall_message = string_printing(sx->buffer); - for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next) - if (addr->transport_return == OK) - addr->message = string_sprintf("%s\\n%s", addr->message, overall_message); + overall_message = string_printing(sx->buffer); + for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next) + if (addr->transport_return == OK) + addr->message = string_sprintf("%s\\n%s", addr->message, overall_message); - for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next) - if (addr->transport_return == OK) - { - if (testflag(addr, af_homonym)) - sprintf(CS sx->buffer, "%.500s/%s\n", addr->unique + 3, tblock->name); - else - sprintf(CS sx->buffer, "%.500s\n", addr->unique); + for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next) + if (addr->transport_return == OK) + { + if (testflag(addr, af_homonym)) + sprintf(CS sx->buffer, "%.500s/%s\n", addr->unique + 3, tblock->name); + else + sprintf(CS sx->buffer, "%.500s\n", addr->unique); - DEBUG(D_deliver) debug_printf("journalling(PRDR) %s\n", sx->buffer); - len = Ustrlen(CS sx->buffer); - if (write(journal_fd, sx->buffer, len) != len) - log_write(0, LOG_MAIN|LOG_PANIC, "failed to write journal for " - "%s: %s", sx->buffer, strerror(errno)); - } - else if (addr->transport_return == DEFER) - retry_add_item(addr, addr->address_retry_key, -2); - } + DEBUG(D_deliver) debug_printf("journalling(PRDR) %s\n", sx->buffer); + len = Ustrlen(CS sx->buffer); + if (write(journal_fd, sx->buffer, len) != len) + log_write(0, LOG_MAIN|LOG_PANIC, "failed to write journal for " + "%s: %s", sx->buffer, strerror(errno)); + } + else if (addr->transport_return == DEFER) + retry_add_item(addr, addr->address_retry_key, -2); + } #endif /* Ensure the journal file is pushed out to disk. */ @@ -4141,7 +4172,6 @@ if (!sx->ok) ); } - /* If all has gone well, send_quit will be set TRUE, implying we can end the SMTP session tidily. However, if there were too many addresses to send in one message (indicated by first_addr being non-NULL) we want to carry on with the @@ -4230,9 +4260,10 @@ if (sx->completed_addr && sx->ok && sx->send_quit) int socket_fd = sx->cctx.sock; - if (sx->first_addr != NULL) /* More addresses still to be sent */ - { /* in this run of the transport */ - continue_sequence++; /* Causes * in logging */ + if (sx->first_addr != NULL) /* More addresses still to be sent */ + { /* in this run of the transport */ + continue_sequence++; /* Causes * in logging */ + pipelining_active = sx->pipelining_used; /* was cleared at DATA */ goto SEND_MESSAGE; } diff --git a/src/src/transports/smtp.h b/src/src/transports/smtp.h index 8ea844b38..46b1b041c 100644 --- a/src/src/transports/smtp.h +++ b/src/src/transports/smtp.h @@ -144,6 +144,7 @@ typedef struct { #endif BOOL pending_MAIL:1; BOOL pending_BDAT:1; + BOOL RCPT_452:1; BOOL good_RCPT:1; BOOL completed_addr:1; BOOL send_rset:1; diff --git a/test/confs/0217 b/test/confs/0217 index a225df5fe..9842c3988 100644 --- a/test/confs/0217 +++ b/test/confs/0217 @@ -50,7 +50,7 @@ send_to_server: begin retry -* * F,5d,10s +* * F,5d,10s # End diff --git a/test/log/0217 b/test/log/0217 index e84d6e43a..48aa31f4d 100644 --- a/test/log/0217 +++ b/test/log/0217 @@ -277,3 +277,106 @@ 1999-03-02 09:44:33 10HmbP-0005vi-00 -> y@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK" 1999-03-02 09:44:33 10HmbP-0005vi-00 -> z@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK" 1999-03-02 09:44:33 10HmbP-0005vi-00 Completed +1999-03-02 09:44:33 10HmbQ-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbQ-0005vi-00 => y00@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y01@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y02@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y03@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y04@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y05@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y06@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y07@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y08@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y09@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y10@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y11@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y12@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y13@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y14@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y15@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y16@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y17@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y18@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y19@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y20@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y21@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y22@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y23@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y24@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y25@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y26@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y27@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y28@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y29@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y30@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y31@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y32@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y33@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y34@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y35@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y36@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y37@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y38@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y39@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y40@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y41@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y42@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y43@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y44@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y45@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y46@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y47@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y48@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> y49@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 msg accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 => n50@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n51@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n52@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n53@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n54@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n55@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n56@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n57@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n58@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n59@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n60@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n61@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n62@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n63@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n64@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n65@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n66@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n67@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n68@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n69@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n70@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n71@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n72@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n73@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n74@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n75@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n76@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n77@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n78@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n79@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n80@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n81@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n82@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n83@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n84@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n85@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n86@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n87@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n88@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n89@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n90@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n91@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n92@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n93@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n94@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n95@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n96@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n97@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n98@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 -> n99@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 2 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 => n100@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 mesg 3 accepted" +1999-03-02 09:44:33 10HmbQ-0005vi-00 Completed diff --git a/test/scripts/0000-Basic/0217 b/test/scripts/0000-Basic/0217 index a74be606f..db793b065 100644 --- a/test/scripts/0000-Basic/0217 +++ b/test/scripts/0000-Basic/0217 @@ -640,4 +640,342 @@ DATA **** exim -v -odi -DHAP=hosts_avoid_pipelining=127.0.0.1 w x y z **** +# Server says 452 excess-rcpts temp error after first 50 +# Exim client checks after 100 +sudo rm -fr DIR/spool/input +server PORT_S +220 Server ready +EHLO +250-OK +250 PIPELINING +MAIL FROM +250 OK +RCPT TO +250 OK 0 +RCPT TO +250 OK 1 +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK 49 +RCPT TO +452 excess 50 +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess +RCPT TO +452 excess 99 +RCPT TO +452 excess 100 +DATA +354 go +. +250 msg accepted +MAIL FROM +250 good mail +RCPT TO +250 OK 50 +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO +250 OK +RCPT TO:> RCPT TO: SMTP>> RCPT TO: SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: SMTP<< 250 OK SMTP<< 250 OK SMTP<< 550 NO @@ -283,6 +210,107 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected SMTP<< 550 NO SMTP<< 550 NO SMTP<< 550 NO + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> RCPT TO: + SMTP>> DATA SMTP<< 550 NO SMTP<< 550 NO SMTP<< 550 NO @@ -355,34 +383,6 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected SMTP<< 550 NO SMTP<< 550 NO SMTP<< 550 NO - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> RCPT TO: - SMTP>> DATA SMTP<< 550 NO SMTP<< 550 NO SMTP<< 550 NO diff --git a/test/stdout/0217 b/test/stdout/0217 index f08a3fab6..17ed51ba8 100644 --- a/test/stdout/0217 +++ b/test/stdout/0217 @@ -615,3 +615,357 @@ Date: Tue, 2 Mar 1999 09:44:33 +0000 . 250 OK End of script +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250-OK +250 PIPELINING +MAIL FROM: +250 OK +RCPT TO: +250 OK 0 +RCPT TO: +250 OK 1 +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK 49 +RCPT TO: +452 excess 50 +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess +RCPT TO: +452 excess 99 +RCPT TO: +452 excess 100 +DATA +354 go +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmbQ-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: +From: CALLER_NAME +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +. +250 msg accepted +MAIL FROM: +250 good mail +RCPT TO: +250 OK 50 +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK +RCPT TO: +250 OK 99-2 +RCPT TO: +452 excess 100 +DATA +354 go +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmbQ-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: +From: CALLER_NAME +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +. +250 mesg 2 accepted +MAIL FROM: +250 good mail +RCPT TO: +250 OK 100 +DATA +354 go +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmbQ-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: +From: CALLER_NAME +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +. +250 mesg 3 accepted +QUIT +250 OK +End of script -- 2.30.2