С руки, я не вижу ничего ослепительного, на что я могу просто положить палец, чтобы помочь. Лучший способ решить проблемы ASP - это один из двух способов:
- Инкапсуляция логики в компоненте VB COM
- Использовать Response.Write
Лично у VB COM много лишних затрат для устаревшего приложения. Хотя это позволяет улучшить инструментарий, вы должны написать много кода. Если приложение не имеет гораздо более длительного срока годности, чем должно быть в настоящее время, это не лучший выбор. Это оставляет # 2.
Response.Пишите запись и выход из каждой процедуры. Затем вы видите распечатанный поток и определяете, где подпрограмма почты вызывается во второй раз. Если это ничего не дает, то это может быть пользователь, нажимающий кнопку более одного раза (нетерпеливый пользователь). Если последнее, вы должны отключить кнопку.
Одним из способов отслеживания событий является добавление «идентификатора сеанса» к миксу. рефакторинг почтовых подпрограмм (ов) для принятия значения идентификатора, а затем вы можете кодировать «если идентификатор сессии, то не запускайте электронную почту» в микс. Идентификатор сохраняется после того, как отправлено первое электронное письмо, и любые дополнительные вызовы будут видеть идентификатор уже в миксе. Я говорю сессионный идентификатор в кавычках, так как вам обоим приходится работать с концепцией сеанса и концепцией начального потока, чтобы охватить как пользовательскую ошибку (нажатие более одного раза), так и ошибку потока кода. Если вы можете отправлять несколько электронных писем за один сеанс, вам нужно сохранить в миксе какое-то значение «Я отправил это электронное письмо в этом сеансе», чтобы вы не добавляли ошибку не отправлять электронные письма в этот микс.
Вы должны потратить время на исправление потока и на исправление ошибки пользователя. Но сначала найдите время для устранения неполадок, чтобы увидеть, есть ли другие артефакты. Только в классическом ASP-коде это означает запись значений в поток ответа (такой грубый, как газонокосилки с ручным нажатием?).