Отправка электронных писем в веб-приложениях

Я ищу некоторые мнения здесь, я создаю веб-приложение, которое имеет довольно стандартную функциональность:

  1. Регистр для учетной записи путем заполнения формы и представления его.
  2. Получите электронное письмо со ссылкой кода подтверждения
  3. Нажмите на ссылку, чтобы подтвердить новую учетную запись и войти в систему

При отправке электронных писем из веб-приложения это - часто (обычно) случай, что будет некоторое изменение в слое персистентности. Например:

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

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

Мы посмотрим на следующие четыре стратегии относительно случая, где почтовый сервер снижается, с помощью примера 1.

TRANSACTIONAL & SYNCHRONOUS Отправке почтовых сбоев и пользователя показывают сообщение об ошибке, говоря, что их учетная запись не могла быть создана. Приложение, будет казаться, будет медленным и безразличным, поскольку приложение ожидает тайм-аута соединения. Учетная запись не создается в базе данных, потому что транзакция откатывается.

TRANSACTIONAL & ASYNCHRONOUS Транзакционное определение здесь посылает к отправке электронного письма очереди JMS или сохранению его в таблице базы данных для другого фонового процесса взять и отправить.

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

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

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

NON-TRANSACTIONAL & ASYNCHRONOUS Единственная разница между этим и транзакционный и асинхронный - то, что, если существует ошибка при отправке электронного письма очереди JMS или сохранении его в базе данных, учетная запись пользователя все еще создается, но электронное письмо никогда не посылается, пока пользователь не пытается зарегистрироваться снова.

То, что я хотел бы знать, - то, что другие люди сделали здесь? Можно ли рекомендовать какие-либо другие решения кроме 4, которые я упомянул выше? Что такое разумный способ приблизиться к этой проблеме? Я не хочу сверхпроектировать систему, это справляется с (надо надеяться), редкой ситуацией, где мой почтовый сервер понижается!

Самая простая вещь сделать состоит в том, чтобы кодировать его синхронно, но является там какими-либо другими ловушками к этому подходу? Я предполагаю, что задаюсь вопросом, существует ли лучшая практика, я не мог бы найти много там путем поиска с помощью Google.

11
задан JMM 11 April 2010 в 13:33
поделиться

1 ответ

Мои 2 цента:

  1. После регистрации пользователя никогда не откатывайте регистрацию, если отправка электронного письма не удалась. По простым деловым причинам: они могут не вернуться или перерегистрироваться, если это не сработает с первой попытки. Скорее терпите неполную регистрацию и надоедайте пользователю как можно скорее подтвердить свой адрес электронной почты.

  2. В большинстве случаев, когда отправка электронной почты идет не так, как надо, ваше приложение все равно не получит немедленную обратную связь - несуществующие адреса электронной почты на действительных серверах будут отправлять обратно «недоставленное» сообщение с некоторой задержкой; если почту съедает спам-фильтр, вы вообще не получите обратной связи; в других сценариях доставка сообщения электронной почты может занять от нескольких минут (серые списки) до нескольких дней (почтовый сервер временно отключен). Поэтому синхронный подход к ожиданию доставки почты IMO обречен.Даже немедленный сбой (из-за того, что пользователь ввел явно поддельный адрес) никогда не должен приводить к откату регистрации.

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

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

10
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: