Вместо того, чтобы отправлять электронные письма напрямую, вы можете использовать папку раскладки?
SmtpMail.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
таким образом, вы просто сбрасываете сообщения в папку и позволяете обмену отправлять их, когда он будет готов, таким образом, если ваш пользователь может отправить только, скажем, 3 в минуту, обмен должен отправить 3, затем на следующем проходе отправить еще 3 и так далее. .