Как сделать эмейл и пароль: Как выбрать имя аккаунта и пароль — Help Mail.ru. Почта

Содержание

Часто задаваемые вопросы по почте на itmo.ru

1. Какие я могу использовать email?

 Ваш email в домене @itmo.ru указан на страницe https://isu.ifmo.ru/mail

Также к вашему ящику привязан соответствующий адрес в домене @corp.ifmo.ru и адрес [ваш табельный номер]@itmo.ru 

2. Какая ситуация с email’ами в других доменах?

Сотрудники, использующие адреса в доменах @mail.ifmo.ru, @ifmo.ru, @niuitmo.ru, @yandex.ru, @mail.ru и прочих, могут продолжать использовать эти email, но рекомендована постепенная смена адресов на @itmo.ru

3. Что мне надо сделать, чтобы получить email в домене @itmo.ru?

Если у вас ранее не было такого email, то войдите на страницу https://isu.ifmo.ru/mail , изучите информацию на ней и введите желаемый email и пароль от своего нового ящика в домене @itmo.ru

(Если у вас не получается авторизоваться в isu.ifmo.ru, необходимо обратиться к специалистам ИСУ по телефону +7 (812) 232-28-51)

Далее вы можете читать почту, используя эти инструкции: http://dici.

ifmo.ru/index.php/sotrudnikam/17-services/itmo-ru

4. Как создать ящик подразделения в зоне @itmo.ru?

Ящик подразделения в зоне @itmo.ru создаётся руководителем подразделения через «Электронные заявки» в https://isu.ifmo.ru

5. Как долго ещё будут работать email в домене @corp.ifmo.ru?

Адреса в домене @corp.ifmo.ru  будут доступны всегда, от @corp.ifmo.ru мы не намерены отказываться, просто ваш основной email адрес будет в домене @itmo.ru (именно по этому адресу будет проходить авторизация и этот адрес по умолчанию будет подставляться в поле from). Ваш адрес в зоне @corp.ifmo.ru будет дополнительным и все письма, направленные на этот адрес будут также попадать в ваш ящик в домене @itmo.ru.

6. Как удалить ящик в домене @itmo.ru?

Вам надо направить соотв. запрос в разделе «Обратная связь», ссылка на который находится в нижней левой части экрана​ https://isu.ifmo.ru

Внимание, все ваши письма в нём также будут удалены!

7. У меня на @corp.ifmo.ru был настроен сбор писем из других ящиков, как настроить тоже самое в новой почте @itmo.ru?

https://e.mail.ru/settings/collector (потребуется авторизация, обратите внимание, что вы должны быть авторизованы именно как [ваше_имя]@itmo.ru, этот email должен быть указан в верхнем левом углу) и следовать указаниям на экране.

8. Как отправить письмо более чем 30 адресатам?

https://blog.mail.ru/send-to-contacts-group/

9. Как настроить «автоответчик»?

https://help.mail.ru/mail-help/settings/autoreply

10. Как переименовать ящик @itmo.ru (@corp.ifmo.ru)?

К сожалению, такой возможности не предусмотрено, но есть два варианта решения этого вопроса:

1. Сначала удалить удалить ящик (см. пункт 6 выше). Затем создать новый корпоративный ящик на странице https://isu.ifmo.ru/mail

2. Вы можете написать завку на предоставление вам дополнительного имени для вашего ящика (в заявке также должно быть указано обоснование для предоставления такого дополнительного имени, например, у Ивановой (Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.) сменилась фамилия на Сидорову, она создаёт заявку на предоставление дополнительного имени Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.. В этом случае все письма, направленные на оба имени, попадают в её ящик Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. ) Заявка подаётся на адрес Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. (строго с корпоративного адреса)

 11. Как настроить пересылку всех писем из ящика @itmo.ru (или любого другого ящика на платформе mail.ru)?

Вам нужно

1. авторизоваться в веб-интерфейсе https://e.mail.ru под тем аккаунтом, письма которого вы хотите перенаправить (например, у вас email Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. и вам надо все письма с него отправить на Этот адрес электронной почты защищён от спам-ботов.

У вас должен быть включен JavaScript для просмотра., тогда вы авторизуетесь под Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. …либо у вас email Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. и вам все письма с него надо отправить на Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., тогда вы авторизуетесь под Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.)

2. Добавить новый фильтр https://e.mail.ru/settings/filters?action=edit с правилами «Удалить навсегда» (если в вашем старом ящике вы не хотите оставлять копию всех писем) и «Переслать копию сообщения», в качестве условия задать параметр, по которому подходят все письма, например «Размер меньше 100000000000», вот так — https://s.mail.ru/MWS6/5ESBarzWY

3. Подтвердить пересылку, введя пароль и затем включить её, нажав переключатель «Вкл. » на странице https://e.mail.ru/settings/filters/?result=add

 12. У меня остались вопросы

Ознакомьтесь с полным списком инструкций здесь: http://dici.ifmo.ru/index.php/sotrudnikam/17-services/itmo-ru/ 

Также ознакомьтесь с инструкциями от mail.ru — https://help.mail.ru/mail-help

13. У меня всё равно остались вопросы

  • Телефон: +7 (812) 607-06-17
  • E-mail Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

 

Использовать настройки IMAP для добавления адреса электронной Workspace Email в клиент | Рабочая почта

Протокол IMAP (Internet Message Access Protocol) позволяет получать доступ к хранящейся на сервере электронной почте с различных устройств. Если у вас есть электронная почта с поддержкой IMAP, вы можете настроить ее в любом клиенте и на любом устройстве.

Эта общая инструкция поможет вам добавить электронный адрес в почтовый клиент на компьютере.

  1. Войдите в Центр настройки электронной почты и осуществите вход, используя ваш адрес Workspace Email и пароль.
  2. В разделе Настройки сервера электронной почты вы увидите настройки входящего сервера (IMAP) и исходящего сервера (SMTP).
  3. Откройте выбранный почтовый клиент и создайте новый аккаунт.
  4. Когда вы перейдете к настройкам IMAP, введите свой Входящий порт и
    Исходящий порт
    :
    Имя хоста сервера Порт SSL
    Входящие (IMAP) imap.secureserver.net 993
    Исходящая почта (SMTP) smtpout.secureserver.net 465 587 (TSL/SSL — Mac)
  5. Введите имя пользователя (адрес электронной почты) и пароль (используемый для электронной почты).
  6. Вас могут попросить предоставить дополнительную информацию или настройки почтового клиента, а также сохранить ваши настройки.

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

Статьи по теме

1С-Битрикс Разработчикам — Единый вход в Битрикс24

Добрый день, коллеги!

Снова хочу поделиться с вами новинками Битрикс24  и сегодня мой сценарий коснется не просто Битрикс24, но и Битрикс24.Network.

Хочу рассказать вам как работать с несколькими Битрикс24, которые зарегистрированы на разные E-mail адреса и как создать Единый вход.

В одном из обновлений Битрикс24 мы представили новый механизм авторизации через аккаунт Нетворка.

Мы создали этот механизм для более удобного и быстрого входа в любой Битрикс24, где вы работаете, без запоминания разных паролей и E-mail адресов, с которыми вы когда-то регистрировались.

Многие пользователи работают с разными Битрикс24 — где-то он может быть администратором, где-то экстранет пользователем, а где-то просто внутренним сотрудником. Но помнить для каждого Битрикс24 E-mail и пароль очень сложно, даже если у вас отличная память или вы храните пароли в специальной программе, в любом случае,  это усложнит вход, так как требует и времени на поиск нужных данных для входа и заставляет постоянно задумываться какой пароль вы использовали при регистрации для конкретного Битрикс24.

Но теперь вам достаточно помнить один E-mail и только один пароль. Вы сможете войти в любой Битрикс24, где вы зарегистрированы, используя Единый вход.  

[spoiler]
Что необходимо сделать?

Если у вас уже есть несколько Битрикс24, но на всех вы были зарегистрированы с одним E-mail и паролем, то делать совсем ничего не нужно.

Система автоматически объединяет список всех ваших Битрикс24 в единый аккаунт Нетворка, а значит вы можете авторизоваться в своем Нетворке и увидеть там список всех Битрикс24, на которых вы зарегистрированы.

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

Теперь вы можете создать Единую авторизацию для всех своих Битрикс24 и объединить их единым E-mail и паролем.

Сделать это достаточно просто, в вашем аккаунте Нетворка, в списке доступных порталов появился пункт «Единый вход». Перейдя по ссылке вы попадаете на страничку объединения, где сможете собрать все Битрикс24 в единый аккаунт.


В первую очередь, вам необходимо указать E-mail и пароль от одного из аккаунтов, который необходимо объединить. После проверки введенных данных, во второй колонке появится список всех Битрикс24, которые привязаны к этому аккаунту. Затем введите данные от второго аккаунта, т. е. другой E-mail, с которым вы зарегистрированы на других Битрикс24.

Во второй колонке также пополнится список Битрикс24, которые привязаны к указанному аккаунту.

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

Следующим шагом выберите E-mail и пароль, которые будут основными для входа на любой из указанных в списке Битрикс24.

Это очень важный шаг, обратите внимание, что процесс объединения необратим. Если вы выбрали основной E-mail и нажали кнопку «Сделать основным», система автоматически создает Единый вход для всех, указанных в списке, Битрикс24.

После этого вы сможете войти на любой из них только по основному E-mail и привязанному к нему паролю. Вход с прежним E-mail и паролем будет невозможен.

Я вошел через соцсеть, как добавить в список объединения такой аккаунт?

Если у вас есть Битрикс24, которые были зарегистрированы через соцсети, т.е. они не имеют привязку к конкретному Е-mail адресу, то для того чтобы создать для них Единый вход, необходимо указать E-mail.

Сделать это можно на странице редактирования профиля Битрикс24, по ссылке «Редактировать мой Битрикс24.Паспорт».


Обратите внимание, что для завершения привязки, необходимо подтвердить E-mail, перейдя по ссылке в письме.
Что происходит после объединения?

После того как вы выбрали Основной Е-mail и пароль все ваши Битрикс24, а также сообщения будут собраны в одном аккаунте Нетворка, в одном Битрикс24.Паспорте.

При объединении, профиль Нетворка будет выбран с основного аккаунта, поэтому рекомендуем проверить данные чтобы ваши собеседники могли узнать вас.

Сообщения также будут объединены, если у вас был диалог с одним и тем же человеком, но в разных аккаунтах, например, вы разговаривали с Петровым Иваном в одном аккаунте Нетворка, а потом с ним же уже в другом аккаунте, где были авторизованы под другим E-mail.  Так вот после объединения, у вас сохранятся оба диалога, один как обычный чат, второй будет сохранен как групповой чат, откуда вы сможете увидеть всю историю переписки.

Списки друзей, приглашения, все также будет сохранено, вы увидите общие данные со всех аккаунтов, которые были выбраны для объединения.

Таким образом, вы сможете создать Единый вход для всех Битрикс24, объединить их единым E-mail и паролем.

P.S. На нашем сайтетакже есть страничка с описанием Битрикс24.Паспорта и Единым входом.

Поддержка электронной почты (издание 2018) / Хабр

Miguel Grinberg

Туда Сюда

Это десятая часть серии Mask-Tutorial Flask, в которой я расскажу вам, как приложение может отправлять электронные письма вашим пользователям и как создать функцию восстановления пароля при поддержке адреса электронной почты.

Под спойлером приведен список статей этой серии.


Примечание 1: Если вы ищете старые версии данного курса, это здесь.

Примечание 2: Если вдруг Вы захотели бы выступить в поддержку моей(Мигеля) работы, или просто не имеете терпения дожидаться статьи неделю, я (Мигель Гринберг)предлагаю полную версию данного руководства(на английском языке) в виде электронной книги или видео. Для получения более подробной информации посетите learn.miguelgrinberg.com.

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

Почему приложение должно что то отправлять по электронной почте своим пользователям? Существует много причин, но одна из них — решение проблем, связанных с аутентификацией. В этой главе я собираюсь добавить функцию сброса пароля для пользователей, которые постоянно забывают свой пароль. Когда пользователь запрашивает сброс пароля, приложение отправляет электронное письмо со специально созданной ссылкой. Затем пользователю необходимо щелкнуть эту ссылку, чтобы получить доступ к форме, в которой можно установить новый пароль.

Ссылки GitHub для этой главы: Browse, Zip, Diff.


Введение в Flask-Mail

Что касается отправки электронной почты, то Flask имеет для этой цели расширение под названием Flask-Mail, которое поможет сделать эту задачу очень простой. Как всегда, оно (это расширение) устанавливается с помощью pip:

(venv) $ pip install flask-mail

Ссылки на сброс пароля должны содержать в себе безопасный токен. Чтобы сгенерировать эти токены, я собираюсь использовать JSON Web Tokens, который также имеет популярный пакет для Python:

(venv) $ pip install pyjwt

Расширение Flask-Mail настроено из объекта app.config. Помните, когда в главе 7 я добавил конфигурацию электронной почты для отправки электронной почты всякий раз, когда произошла ошибка в производстве? Тогда я не сказал вам об этом, но мой выбор переменных конфигурации был смоделирован после требований Flask-Mail, поэтому нет необходимости в какой-либо дополнительной работе, переменные конфигурации уже находятся в приложении.

Как и для большинства расширений Flask, вам нужно создать экземпляр сразу после создания приложения Flask. В этом случае это объект класса Mail:

# ...
from flask_mail import Mail

app = Flask(__name__)
# . ..
mail = Mail(app)

Прим. переводчика: Очень важно что бы строка mail = Mail(app) располагалась после app.config.from_object(Config).

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

(venv) $ python -m smtpd -n -c DebuggingServer localhost:8025

Чтобы настроить этот сервер, необходимо установить две переменные среды:

(venv) $ export MAIL_SERVER=localhost
(venv) $ export MAIL_PORT=8025

Если вы предпочитаете отправлять электронные письма «по-взрослому», вам необходимо использовать настоящий почтовый сервер. Если он у вас есть, вам просто нужно установить для него переменные среды MAIL_SERVER, MAIL_PORT, MAIL_USE_TLS, MAIL_USERNAME и MAIL_PASSWORD. Для особо ленивых, напоминаю, как использовать учетную запись Gmail для отправки электронной почты со следующими настройками:

(venv) $ export MAIL_SERVER=smtp.googlemail.com
(venv) $ export MAIL_PORT=587
(venv) $ export MAIL_USE_TLS=1
(venv) $ export MAIL_USERNAME=<your-gmail-username>
(venv) $ export MAIL_PASSWORD=<your-gmail-password>

Если вы используете Microsoft Windows, вам необходимо заменить export на set в каждой из указанных выше export-ных инструкций.

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


Использование Flask-Mail

Для демонстрации работы Flask-Mail, я покажу вам, как отправить электронное письмо из оболочки Python. Для этого запустите Python с flask shell, а затем выполните следующие команды:

>>> from flask_mail import Message
>>> from app import mail
>>> msg = Message('test subject', sender=app.config['ADMINS'][0],
... recipients=['[email protected]'])
>>> msg.body = 'text body'
>>> msg.html = '<h2>HTML body</h2>'
>>> mail.send(msg)

Фрагмент кода, приведенный выше, отправит электронное письмо на список адресов электронной почты, которые вы указали в аргументе recipients. В качестве отправителя (sender) я использую настройку администратора (я добавил переменную в конфиге ADMINS см.в главе 7). Письмо будет иметь простой текст в HTML-версии, поэтому в зависимости от того, как настроен ваш почтовый клиент, вы можете увидеть тот или иной вариант.

Короче, это довольно просто. Теперь давайте интегрируем электронные письма в приложение.


Простой Email Framework

Начнем с написания вспомогательной функции, отправляющей электронное письмо. В общих чертах она повторяет собой упражнение flask shell из предыдущего раздела. Я положу эту функцию в новый модуль под названием app/email.py:

from flask_mail import Message
from app import mail

def send_email(subject, sender, recipients, text_body, html_body):
    msg = Message(subject, sender=sender, recipients=recipients)
    msg.body = text_body
    msg.html = html_body
    mail.send(msg)

Flask-Mail поддерживает некоторые интересные функции, которые я здесь не использую. Такие как списки Cc и Bcc. Обязательно ознакомьтесь с документацией Flask-Mail, если вас заинтересовали эти параметры.


Запрос сброса пароля

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

<p>
    Forgot Your Password?
    <a href="{{ url_for('reset_password_request') }}">Click to Reset It</a>
</p>

Когда пользователь нажмет на ссылку Click to Reset It, появится новая веб-форма, которая запрашивает адрес электронной почты пользователя в качестве способа инициирования процесса сброса пароля. Вот класс формы:

class ResetPasswordRequestForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    submit = SubmitField('Request Password Reset')

И вот соответствующий HTML-шаблон:

{% extends "base.html" %}

{% block content %}
    <h2>Reset Password</h2>
    <form action="" method="post">
        {{ form.hidden_tag() }}
        <p>
            {{ form.email.label }}<br>
            {{ form.email(size=64) }}<br>
            {% for error in form.email.errors %}
            <span>[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>{{ form. submit() }}</p>
    </form>
{% endblock %}

Понадобится также view-функция для обработки этой формы:

from app.forms import ResetPasswordRequestForm
from app.email import send_password_reset_email

@app.route('/reset_password_request', methods=['GET', 'POST'])
def reset_password_request():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = ResetPasswordRequestForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user:
            send_password_reset_email(user)
        flash('Check your email for the instructions to reset your password')
        return redirect(url_for('login'))
    return render_template('reset_password_request.html',
                           title='Reset Password', form=form)

Это функция просмотра сильно смахивает на другие, которые обрабатывают форму. Стартуем с того, что пользователь не вошел в систему. Если пользователь вошел в систему, то нет смысла использовать функцию сброса пароля, а следует перенаправить вывод на страницу index.

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

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


Токены сброса пароля

Прежде чем реализовать функцию send_password_reset_email(), мне нужно придумать способ создания ссылки на запрос пароля. Это будет ссылка, которая будет отправлена ​​пользователю по электронной почте. При щелчке по ссылке пользователю предоставляется страница, где может быть установлен новый пароль. Сложная часть этого плана — убедиться, что для сброса пароля учетной записи можно использовать только действительные ссылки сброса.

Ссылки будут снабжены токеном, и этот токен будет проверен, прежде чем разрешить изменение пароля, в качестве доказательства того, что пользователь, который запросил электронное письмо, имеет доступ к адресу электронной почты в учетной записи. Очень популярным стандартом токена для этого типа процесса является JSON Web Token, или JWT. Самое приятное в JWT заключается в том, что они самодостаточны. Вы можете отправить токен пользователю по электронной почте, и когда пользователь нажмет на ссылку, которая возвращает токен обратно в приложение, его можно проверить самостоятельно.

Что бы разобраться как работают JWT? Ничего лучше не придумать, как испытать это в сеансе оболочки Python:

>>> import jwt
>>> token = jwt.encode({'a': 'b'}, 'my-secret', algorithm='HS256')
>>> token
b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. eyJhIjoiYiJ9.dvOo58OBDHiuSHD4uW88nfJikhYAXc_sfUHq1mDi4G0'
>>> jwt.decode(token, 'my-secret', algorithms=['HS256'])
{'a': 'b'}

Словарь {'a': 'b'} представляет собой пример полезной нагрузки, которая будет записана в токен. Чтобы сделать токен безопасным, необходимо предоставить секретный ключ для использования при создании криптографической подписи. В этом примере я использовал строку my-secret, но с приложением я собираюсь использовать SECRET_KEY из конфигурации. Аргумент algorithm указывает, как должен генерироваться токен. Наиболее широко используется алгоритм HS256.

Как видите, итоговый токен — это длинная последовательность символов. Но не думайте, что это зашифрованный токен. Содержимое токена, включая полезную нагрузку, может быть легко декодировано любым пользователем (не верите мне? Скопируйте вышеуказанный токен, а затем введите его в отладчик JWT, чтобы просмотреть его содержимое). Что делает маркер безопасным, так это то, что полезная нагрузка имеет подпись. Если кто-то пытался подделать или манипулировать полезной нагрузкой в ​​токене, тогда подпись будет признана недействительной, а для создания новой подписи необходим секретный ключ. Когда токен проверен, содержимое полезной нагрузки декодируется и возвращается обратно вызывающему абоненту. Если подпись токена была подтверждена, то полезной нагрузке можно доверять как аутентичной.

Полезная нагрузка, которую я буду использовать для токенов сброса пароля, будет иметь формат {'reset_password': user_id, 'exp': token_expiration}. Поле exp является стандартным для JWT, и если оно присутствует, то это указывает на время истечения срока действия токена. Если у токена есть действительная подпись, но она превысила отметку времени истечения срока действия, то такая подпись будет считаться недействительной. Для функции сброса пароля я собираюсь дать этим токенам 10 минут жизни.

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

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

from time import time
import jwt
from app import app

class User(UserMixin, db.Model):
    # ...

    def get_reset_password_token(self, expires_in=600):
        return jwt.encode(
            {'reset_password': self.id, 'exp': time() + expires_in},
            app.config['SECRET_KEY'], algorithm='HS256').decode('utf-8')

    @staticmethod
    def verify_reset_password_token(token):
        try:
            id = jwt.decode(token, app.config['SECRET_KEY'],
                            algorithms=['HS256'])['reset_password']
        except:
            return
        return User. query.get(id)

Функция get_reset_password_token() генерирует токен JWT в виде строки. Обратите внимание, что decode('utf-8') необходим, потому что функция jwt.encode() возвращает токен в виде последовательности байтов, но в приложении удобнее иметь токен в виде строки.

Функция проверки verify_reset_password_token() является статическим методом, что означает, что он может быть вызван непосредственно из класса. Статический метод похож на метод класса, с той лишь разницей, что статические методы не требуют создавать экземпляр класса. Если попроще, то отсутствует первый аргумент self. Этот метод принимает токен и пытается его декодировать, вызывая функцию jwt.decode() PyJWT. Если токен не может быть проверен или истек его срок, будет вызвано исключение, и в этом случае я перехвачу его, чтобы предотвратить последствия ошибки, а затем возвращу None. Если токен действителен, тогда значение ключа reset_password из полезной нагрузки токена является идентификатором пользователя, поэтому я могу загрузить пользователя и вернуть его на страницу.


Отправка электронной почты для сброса пароля

Теперь, когда у меня есть токены, я могу сгенерировать электронные письма для сброса пароля. Функция send_password_reset_email() зависит от функции send_email(), которую я написал выше.

from flask import render_template
from app import app

# ...

def send_password_reset_email(user):
    token = user.get_reset_password_token()
    send_email('[Microblog] Reset Your Password',
               sender=app.config['ADMINS'][0],
               recipients=[user.email],
               text_body=render_template('email/reset_password.txt',
                                         user=user, token=token),
               html_body=render_template('email/reset_password.html',
                                         user=user, token=token))

Интересной частью этой функции является то, что текст и содержимое HTML для электронных писем генерируются из шаблонов с использованием знакомой функции render_template(). Шаблоны принимают пользователя и токен в качестве аргументов, так что может генерироваться персонализированное сообщение электронной почты. Вот текстовый шаблон для сброса пароля:

Дорогой наш {{ user.username }},

ты забыл пароль? И похоже, не впервый раз. Бывает!

Чтобы сбросить пароль, жмакни на следующую ссылку:

{{ url_for('reset_password', token=token, _external=True) }}

Если ты не запрашивал сброс пароля, просто забей на это сообщение.

С уважением,

Команда Microblog

Или вот так, поприличней, в HTML-версии почти того же письма с более приличным текстом:

<p>Уважаемый {{ user.username }},</p>
<p>
    Чтобы сбросить пароль
    <a href="{{ url_for('reset_password', token=token, _external=True) }}">
        кликните по ссылке
    </a>.
</p>
<p>Кроме того, вы можете вставить следующую ссылку в адресную строку браузера:</p>
<p>{{ url_for('reset_password', token=token, _external=True) }}</p>
<p>Если вы не запрашивали сброс пароля, просто проигнорируйте это сообщение. </p>
<p>С Уважением,</p>
<p>Команда Microblog</p>

Обратите внимание, что маршрут reset_password, на который ссылается вызов url_for() в этих двух шаблонах электронной почты, еще не существует, он будет добавлен в следующем разделе.


Сброс пароля пользователя

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

from app.forms import ResetPasswordForm

@app.route('/reset_password/<token>', methods=['GET', 'POST'])
def reset_password(token):
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    user = User.verify_reset_password_token(token)
    if not user:
        return redirect(url_for('index'))
    form = ResetPasswordForm()
    if form.validate_on_submit():
        user.set_password(form.password.data)
        db.session.commit()
        flash('Your password has been reset. ')
        return redirect(url_for('login'))
    return render_template('reset_password.html', form=form)

В этой функции просмотра я сначала удостоверяюсь, что пользователь не вошел в систему, а затем я определяю, кто пользователь, вызывая метод проверки токена в классе User. Этот метод возвращает пользователя, если токен действителен, или None, если нет. Если токен недействителен, я перенаправляюсь на домашнюю страницу index.

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

Вот класс ResetPasswordForm:

class ResetPasswordForm(FlaskForm):
    password = PasswordField('Password', validators=[DataRequired()])
    password2 = PasswordField(
        'Repeat Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Request Password Reset')

А это соответствующий шаблон HTML:

{% extends "base. html" %}

{% block content %}
    <h2>Reset Your Password</h2>
    <form action="" method="post">
        {{ form.hidden_tag() }}
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}<br>
            {% for error in form.password.errors %}
            <span>[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>
            {{ form.password2.label }}<br>
            {{ form.password2(size=32) }}<br>
            {% for error in form.password2.errors %}
            <span>[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

Вот сейчас функция сброса пароля завершена. Давайте, попробуйте.


Асинхронные сообщения

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

Хотелось бы, чтобы функция send_email() была асинхронной. Что это значит? Это означает, что при вызове этой функции задача отправки электронной почты запланирована в фоновом режиме, освобождая send_email() для немедленного возврата, чтобы приложение могло продолжать работать одновременно с отправляемым электронным письмом.

У Python есть поддержка для запуска асинхронных задач, фактически более чем одним способом. Могут выполняться поточные, и многопроцессорные (threading и multiprocessing) модули. Запуск фонового потока для отправленного сообщения намного менее ресурсоемкий, чем запуск совершенно нового процесса, поэтому я собираюсь пойти именно таким путем:

from threading import Thread
# . ..

def send_async_email(app, msg):
    with app.app_context():
        mail.send(msg)

def send_email(subject, sender, recipients, text_body, html_body):
    msg = Message(subject, sender=sender, recipients=recipients)
    msg.body = text_body
    msg.html = html_body
    Thread(target=send_async_email, args=(app, msg)).start()

Функция send_async_email теперь работает в фоновом потоке, поскольку вызывается через класс Thread() в последней строке send_email(). Отправка по электронной почте теперь будет выполняться в отдельном потоке, и когда процесс завершится, поток завершится и очистится. Если вы настроили и используете настоящий почтовый сервер, вы обязательно заметите улучшение скорости, когда вы нажмете кнопку «Отправить» в форме запроса сброса пароля.

Вероятно, вы ожидали, что в поток будет отправлен только аргумент msg, но, как видно в коде, я также отправляю экземпляр app. При работе с потоками есть важный аспект дизайна Flask, который нужно иметь в виду. Flask использует contexts, чтобы избежать необходимости передавать аргументы через функции. Я не собираюсь подробно останавливаться на этом, но знаю, что существуют два типа контекстов, контекст приложения и контекст запроса (application context и request context). В большинстве случаев эти контексты автоматически управляются инфраструктурой, но когда приложение запускает пользовательские потоки, контексты для этих потоков могут потребовать ввода вручную.

Существует множество расширений, для которых требуется, чтобы контекст приложения работал, потому что это позволяет им найти экземпляр приложения Flask без его передачи в качестве аргумента. Причина, по которой многие расширения должны знать экземпляр приложения, заключается в том, что они имеют конфигурацию, хранящуюся в объекте app.config. Это как раз ситуация с Flask-Mail. Метод mail.send() должен получить доступ к значениям конфигурации для почтового сервера, и это может быть сделано только зная, что такое app. Контекст приложения, созданный с вызовом with app.app_context(), делает экземпляр приложения доступным через переменную current_app из Flask.

Туда Сюда

Как ввести новый пароль электронной почты на вашем iPhone

Вы не можете ни отправлять, ни получать электронные письма на своем iPhone? Вы получаете сообщение об ошибке о неверном пароле? Отправка и получение писем — это независимые процессы, поэтому один может работать, а другой — нет. В частности, ваш iPhone может отправлять электронные письма, но не получать электронные письма, или наоборот. Следовательно, вам нужно посетить два места, чтобы ввести правильный пароль учетной записи электронной почты.

Ниже приведены инструкции по вводу правильного пароля учетной записи электронной почты только , если вы используете IMAP для доступа к учетной записи электронной почты. Эти инструкции не применяются к , если у вас есть учетная запись iCloud, учетная запись Gmail, учетная запись Yahoo или учетная запись электронной почты Exchange или если вы используете POP для доступа к своей учетной записи электронной почты.

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

Как ввести пароль для входящей почты (IMAP) в Apple Mail на iPhone, iPad или iPod Touch
  1. Нажмите на своем устройстве значок «Настройки».
  2. Прокрутите вниз и нажмите Пароли и Учетные записи . (Если ваш iPhone использует iOS 10 или более раннюю версию, нажмите Почта, Контакты, Календари.)
  3. В списке учетных записей нажмите на учетную запись, которую вы хотите обновить.
  4. На следующем появившемся экране нажмите на адрес электронной почты, указанный в поле Учетная запись .
  5. Прокрутите вниз до раздела ВХОДЯЩИЙ ПОЧТОВЫЙ СЕРВЕР , найдите поле Пароль и введите свой пароль.
  6. Нажмите кнопку Готово в правом верхнем углу.
  7. Нажмите кнопку Home на передней панели iPhone, чтобы выйти из настроек и вернуться на главный экран iPhone.
  8. Откройте Mail и проверьте его, чтобы убедиться, что вы можете получать сообщения электронной почты с этой учетной записи электронной почты.
Как ввести пароль для исходящей почты (SMTP) в Apple Mail на iPhone, iPad или iPod Touch
  1. Нажмите на своем устройстве значок «Настройки».
  2. Прокрутите вниз и нажмите Пароли и Учетные записи . (Если ваш iPhone использует iOS 10 или более раннюю версию, нажмите Почта, Контакты, Календари.)
  3. В списке учетных записей нажмите на учетную запись, которую вы хотите обновить.
  4. На следующем появившемся экране нажмите на адрес электронной почты, указанный в поле Учетная запись .
  5. Прокрутите вниз до раздела ИСХОДЯЩИЙ ПОЧТОВЫЙ СЕРВЕР , затем нажмите на поле SMTP .
  6. Нажмите на имя сервера, указанное в поле ПЕРВИЧНЫЙ СЕРВЕР .
  7. В разделе ИСХОДЯЩИЙ ПОЧТОВЫЙ СЕРВЕР найдите поле Пароль и введите новый пароль.
  8. Нажмите кнопку Готово в правом верхнем углу.
  9. Нажмите кнопку Home на передней панели iPhone, чтобы выйти из настроек и вернуться на главный экран iPhone.
  10. Откройте Mail и проверьте его, чтобы убедиться, что вы можете отправлять сообщения с этой учетной записи электронной почты.
Узнайте больше о входе, IMAP, входящем, ios, iPhone, исходящем, пароле, SMTP.

Был ли этот совет полезным?

Пожалуйста, рассмотрите возможность отправки чаевых.

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

Сделайте взнос с помощью кредитной карты, PayPal или ApplePay.

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

Создайте адрес электронной почты и пароль

Результаты листинга Введите адрес электронной почты и пароль

Создайте учетную запись электронной почты сегодня на mail.com

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