Я думаю, что реальный ответ зависит от того, насколько важно, чтобы электронное письмо было отправлено один раз, и сколько ошибок вы хотите выполнить. Позвольте мне объяснить:
У нас есть система отчетов об инцидентах, которая отправляет электронное письмо при вводе инцидента. Не понимая объема электронных писем, мы бы изначально отправляли его по 100 штук за раз (ограничения SMTP) и просматривали группы, если их было больше, - после некоторых продаж мы обнаружили, что отправлялось свыше нескольких тысяч на каждую запись, и их отправка может занять почти минуту - создание почтового потока не очень подходило для этого, поэтому мы создали очередь почты и каждые 5 минут выполняли цикл обработки и отправляли все, что не было отправлено. - ошибка - если очередь задержалась или если в очереди было так много электронных писем, что ее запуск занимал более 5 минут, то это началось бы снова, и некоторые сообщения были отправлены 2, 3 4, даже 10 раз - возможно, был плохой дизайн, но что бы то ни было
В конце концов, мы только что переместили все это на почтовую очередь SQL Server, и она работала как первоочередная задача - настоящий урок (на мой взгляд,) заключается в том, чтобы выполнять всю обработку, как вам нужно, в вашей программе, но как только вы знаете, электронные письма должны быть отправлены и кому они передаются тому, что специально обрабатывает отправку электронной почты (CDO, почта Sql Server, Oracle и т. д.)
Вы все еще можете проверить всю логику в своем приложении, но пусть электронная почта позаботится о чем-то, созданном для обработки электронной почты.