Вопрос

Когда я создаю пользователя для моего веб -приложения, SMTP -электронную почту (с помощью SMTPClient ASP.NET) отправляется пользователю с автоматически сгенерированным паролем.Однако иногда я замечаю, что время ожидания истекает, и новый пользователь просто не получит электронное письмо с паролем.

Хорошо, я покажу сообщение о том, что почта не прошла, но пользователь создан.

Поэтому у сисадмина пока есть 2 варианта:

  1. Сбросьте пароль пользователя и надейтесь, что другое письмо SMTP будет отправлено с автоматически сгенерированным паролем.
  2. Удалите и заново создайте пользователя.

Я мог бы отменить создание пользователя, если smtp не отправляется, но как лучше всего решить эту проблему?

Я думаю, что мне следует повторить попытку отправки электронного письма 3 раза с периодом ожидания 5 секунд каждый.Таким образом, 15 секунд будут худшим сценарием.

Это правильный путь?

Это было полезно?

Решение

Что ж, в зависимости от вашей платформы, если вы можете просто передать почту местному MTA, он должен обрабатывать повторные попытки и тому подобное.Ваша программа может просто поставить почту в очередь и двигаться дальше, не беспокоясь о таймаутах, серых списках и т. д.

Если сообщение по-прежнему не может быть доставлено, вы всегда можете попробовать отправить его повторно (с помощью функции сброса пароля).Если и это не помогло, скорее всего, в адресе электронной почты была ошибка, и я бы предложил удалить учетную запись, заставив пользователя перерегистрироваться.

Это, конечно, может быть невозможно в некоторых системах, в зависимости от того, что можно сделать с неподтвержденным пользователем — это действительно зависит от того, что вы разрешаете людям делать до того, как их адрес электронной почты будет проверен.

Другие советы

Похоже, ваше веб-приложение передает SMTP напрямую почтовому серверу вашего пользователя.Ваше веб -приложение - это MUA (агент по почте), разговаривающий с MTA пользователя (агент по передаче почты).] Ничто не говорит о том, что MTA пользователя должен быть доступен или работать в данный момент.Вам необходимо запустить собственный MTA, чтобы гарантировать, что кто-то обеспечивает организацию очереди, повторные попытки и т. д.

Если вы действительно хотите отступить назад, вы можете сделать то, что делаете (правда, только одна попытка), вернуться к постановке сообщения в очередь и продолжать повторять попытки по более медленному графику в течение как минимум 24 часов, и предоставить это незавершенное состояние пользователь.

Официальный ответ о том, как должно вести себя ваше приложение, можно найти в RFC1123 (Требования к интернет-хостам — применение и поддержка):

5.3.1.1 Стратегия отправки

Общая модель отправителя-SMTP-это один или несколько процессов, которые периодически пытаются передавать исходящую почту.В типичной системе программа, которая сочиняет сообщение, имеет некоторый метод для немедленного внимания к новой части исходящей почты, в то время как почта, которая не может быть передана немедленно, должна быть в очереди и периодически пересматривать отправитель.Запись в очереди на почту будет включать не только само сообщение, но и информацию о конверте.

Отправитель должен отложить повторение определенного пункта назначения после того, как одна попытка потерпела неудачу.В общем, интервал повторного периода должен составлять не менее 30 минут;Тем не менее, более сложные и переменные стратегии будут полезны, когда отправитель-SMTP может определить причину без доставки.

Подачи продолжаются до тех пор, пока сообщение не будет передано или отправитель не сдатся;Время отказа, как правило, должно быть не менее 4-5 дней.Параметры для алгоритма повторной попытки должны быть настраиваются.

Если вы используете ASP.NET и классы System.Net.Mail, вы, вероятно, отправляете почту через экземпляр IIS на компьютере веб-сервера (я не уверен, поскольку вы не указали).Не существует хорошего способа узнать, что происходит с вашим агентом передачи почты (IIS SMTP).Он имеет собственную логику повторов, и по умолчанию доставка сообщения может занять много времени.

Как вы определяете, что письмо не доставлено?Откуда взялся «тайм-аут»?

У вас должен быть фоновый процесс, который обрабатывает отправку почты.Если доставка в MTA прошла успешно, следует предположить, что все в порядке.Если вы не внесены в черный список за СПАМ, большинство MTA будут повторять попытки, пока не дойдут до конца.Если вы действительно получили ошибку при отправке сообщения через MTA, обязательно повторите попытку или выясните причину сбоя и исправьте ошибку.Честно говоря, эта часть никогда не должна подводить.

Возможно, вы захотите отслеживать обратный адрес для сообщений NDR, чтобы иметь возможность предпринять какие-либо действия, когда вы точно знаете, когда электронное письмо не было доставлено.Но если пользователь еще не может войти в систему, нет хорошего способа сообщить ему, что произошло.Возможно, вы могли бы установить файл cookie со значением, которое вы связываете с электронным письмом, и разместить что-нибудь на странице входа/регистрации, если вы не смогли доставить почту.

ИМХО, вам следует уведомить пользователя, попросив его подтвердить электронную почту, без повторных попыток.

Если пользователь не подтверждает почту и покидает страницу, лучше откатить учетную запись, поскольку пользователь все равно не сможет получить к ней доступ.

В большинстве случаев тайм-аут вызван недействительными учетными записями электронной почты.Пользователи либо допустили ошибку, либо предоставили вам несуществующий адрес электронной почты, чтобы избежать спама.

Если это вообще возможно, не спрашивайте электронную почту своих пользователей.Правилом программирования номер один должно быть:НЕ раздражайте пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top