Instead of sending emails directly, can you use a pickup folder?
SmtpMail.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
in this way, you simply upload messages to a folder and let the exchange send them when they are ready, so if your user can only send, say, 3 per minute, the exchange should send 3, then send 3 more to the next pass, and so on.
source share