С небольшой тщательностью это можно сделать с помощью очень простого консольного приложения, которое можно вызвать из веб-формы для отправки электронных писем. Под усердием я подразумеваю вставить паузу между партиями, чтобы почтовый сервер не зависал. Например, если вы берете адреса из БД и отправляете их, у вас может быть что-то вроде:
if ((count >= 100) && (count % 100 == 0))
Thread.Sleep(30000);
-----------------------------------------
// Код веб-формы
// Передать тему и строки сообщения как параметры в консольное приложение
ProcessStartInfo info = new ProcessStartInfo();
string arguments = String.Format(@"""{0}"" ""{1}""",
subjectText.Text.Replace(@"""", @""""""),
messageText.Text.Replace(@"""", @""""""));
info.FileName = MAILER_FILEPATH;
Process process = Process.Start(info.FileName, arguments);
Process.Start(info);
Подробнее здесь: Вызов консольного приложения из веб-формы