В зависимости от объема трафика на ваш сайт и от того, насколько точным является ваше время, должен быть другой вариант, в дополнение к предложению @ Peer - иметь некоторый код, который запускается при каждом запросе.Этот код будет проверять, когда выполнялось заданное по времени действие (проверяя базу данных или что-то в этом роде), а затем, истекло ли сегодняшнее время для отправки и еще не отправлено, тогда вы запускаете процедуру отправки.В противном случае вы продолжите как обычно.
Конечно, вы захотите создать новый поток для выполнения работы, чтобы не задерживать пользовательский запрос во время отправки электронной почты.
Недостатки этого метода в том, что он использует кого-то, кто нажимает на ваш сайт.Плюсы этого метода в том, что он может работать поздно без какого-либо специального кода.Метод использования таймеров потребует дополнительного кода при первой проверке, чтобы в основном сделать то, что сделано здесь, чтобы проверить, произошел ли сегодняшний запуск при его запуске.
Я еще раз скажу, что не думаю, что этолучший способ, но если это обязательно должно быть через веб-страницы ASP.NET, тогда это может быть вашим лучшим выбором.
Хотя, если вам разрешено иметь другой код не в ASP.NET, вы можете написать приложение, котороев нужное время перейдет на специальную страницу вашего сайта, сохраняя код таймера в приложении на вашем компьютере (или на сервере, или где-либо еще).специальная страница будет использовать какую-то защиту, чтобы гарантировать, что только вы можете получить к ней доступ (например, защита паролем или подобное), и когда вы нажимаете на страницу, она выполняет функции электронной почты.Таким образом, код электронной почты находится на ваших страницах ASP.NET, но на самом деле код планирования находится в более разумном месте.
Это, конечно, тоже не вариант.