SmtpClient client = new SmtpClient(); > { > client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); > try > { > client.SendCompleted += delegate > { > client.Dispose(); > lock (numRemainingLock) > { > if (--numRemaining == 0) > { > waitHandle.Set(); > } > } > }; > client.SendAsync(msg, userState); // Send our email. > } > catch (Exception) > { > msg.Dispose(); > // throw; > } > } > }Superb! Thanks once again Viv. What is interesting is that all the email is now being sent, but the code never hits the SendCompletedCallback.