the problem seems to be the "slightly experimental code" (so called in the source!) in deliver.c
If it sees address_count_max == 1 it doesn't try to route multiple messages through a connection even when this would be desirable: here's a patch that seems to work for my usage case, someone who really understands this stuff should probably review it. there may well be more wrong with the experimental code than just this case, and/or my code may break other cases. -- Jasen Betts treshna Enterprises Ltd Tel: +64 3 974 9169 or 0800 894 149 (for Jasen dial ext 204 when the voice starts) Fax: +64 28 894 860 Web: www.treshna.com 267 Madras Street, Christchurch, New Zealand IT Consultancy - Websites - Database development - Computer tech support
diff -C5 -r exim4-4.72/src/deliver.c exim4-4.72.fixed/src/deliver.c *** exim4-4.72/src/deliver.c 2011-06-24 18:14:45.325698987 +1200 --- exim4-4.72.fixed/src/deliver.c 2011-06-24 18:13:48.913698961 +1200 *************** *** 3549,3558 **** --- 3549,3567 ---- message_max -= continue_sequence - 1; if (message_max > 0 && new_max > address_count_max * message_max) new_max = address_count_max * message_max; address_count_max = new_max; } + else if (address_count_max == 1 && remote_max_parallel ==1) + { + if (connection_max_messages >= 0) + address_count_max = connection_max_messages; + else + address_count_max = 99999; + } + + /************************************************************************/ /* Pick off all addresses which have the same transport, errors address,