Ваша (основная) ошибка: Thread.Sleep (Int32) ожидает значение в миллисекундах!
Имеет перегрузку , которая принимает TimeSpan , который я настоятельно рекомендую использовать из-за его читабельности.
Но для вашей Задачи под рукой, ...
Я предлагаю вам попробовать его с Timer :
class MailTimer
{
private System.Timers.Timer _Timer = null;
public void StartTimer( TimeSpan period ) // Pass your period as TimeSpan
// e.g. TimeSpan.FromMinutes(10)
{
if( _Timer != null ) throw new InvalidOperationException("Mail Timer already started!");
_Timer = new System.Timers.Timer(period.TotalMilliseconds);
_Timer.Elapsed += OnTimedEvent;
_Timer.AutoReset = true;
_Timer.Enabled = true;
}
public void StopMailing()
{
if( _Timer == null ) return;
_Timer.Stop();
_Timer.Dispose();
_Timer = null;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
TrySendMail(); // Do your Mail-Magic
}
}
Mind: это далеко не потокобезопасно. Пожалуйста, также не просто копируйте и вставляйте. Вам потребуется внести коррективы и принять меры предосторожности в соответствии с вашими требованиями.