Here's the quick & dirty patch. Of course, the delay should be a run-time config setting, possibly dependent on the client address, etc.
--- popper.c 2003/03/13 17:05:02 1.1 +++ popper.c 2003/03/13 17:08:47 @@ -311,6 +311,21 @@ } } else { /* start new command */ + /* + * If M$ Outlook XP receives a response "faster than it expects", + * it ignores the data, and hangs. Work around it. + */ + int command_delay = 50; /* should be in config; too lazy */ + if (command_delay) { +#ifdef HAVE_USLEEP + usleep(command_delay*1000); /* ms -> usec */ +#else + struct timeval tv; + tv.tv_sec = 0; + tv.tv_usec = command_delay*1000; + select(0, NULL, NULL, NULL, &tv); +#endif + } s = pop_get_command ( &p, message ); if ( s != NULL ) { if ( s->function != NULL ) {