#python #email #tornado
#python #Адрес электронной почты #tornado
Вопрос:
Я работаю с Tornado и MongoDB, и я хотел бы отправить электронное письмо с подтверждением пользователю, когда он создаст учетную запись в моем приложении.
На данный момент я использую простую страницу XHTML с формой и отправляю информацию в свою базу данных MongoDB с помощью Tornado. Я хотел бы иметь промежуточный шаг, который отправляет электронное письмо пользователю перед вставкой данных в базу данных.
Я хотел бы знать, как я мог бы отправить это электронное письмо и вставить учетную запись пользователя только после того, как пользователь получит электронное письмо и подтвердит свою регистрацию.
Ответ №1:
Что вам нужно, так это URL активации. URL активации содержит уникальный идентификатор, возможно, UUID, который проверяется, когда пользователь нажимает на URL активации.
Чтобы избежать хранения пользовательских данных в базе данных, вы могли бы сохранить пользовательские данные в URL активации, отправляемом пользователю:
import urllib
data = urllib.urlencode({'name':'joe', 'password':'1234'})
activation_url = 'http://example.com/activate?%s' % data
Но поскольку информация о пользователе отправляется в виде обычного текста, этот метод очень небезопасен.
Правильный подход к этому — сохранить информацию пользователя вместе с флагом активации в базе данных. Когда пользователь нажимает на URL активации, проверяется уникальный идентификатор и флаг активации устанавливается в true, что позволяет создать новую учетную запись пользователя.
Отправка электронной почты на Python довольно проста, когда у вас есть доступ к SMTP-серверу или учетной записи Gmail.
Документы Python содержат несколько примеров отправки электронной почты с Python.
Ответ №2:
Интересно, почему вы так обрабатываете регистрацию. Обычный способ обработки регистрации:
- Запишите информацию о пользователе в базу данных, но с прикрепленным к пользователю ярлыком «неактивный».
- Отправьте электронное письмо пользователю.
- Если пользователь подтвердит регистрацию, переключите пользователя на «активный».
Если вы не хотите выполнять запись в базу данных, вы можете выполнить запись в кэш (например, memcache, redis), затем, когда пользователь подтвердит регистрацию, вы можете получить информацию о пользователе из кэша и записать ее в базу данных.