async def METHOD_NAME(request: web.Request):
    db: AsyncpgStorage = get_plugin_storage(request.app)
    product: Product = get_current_product(request)
    request_body = await parse_request_body_as(ChangeEmailBody, request)
    user = await db.get_user({"id": request[RQT_USERID_KEY]})
    assert user  # nosec
    if user["email"] == request_body.email:
        return flash_response("Email changed")
    other = await db.get_user({"email": request_body.email})
    if other:
        raise web.HTTPUnprocessableEntity(reason="This email cannot be used")
    # Reset if previously requested
    confirmation = await db.get_confirmation({"user": user, "action": CHANGE_EMAIL})
    if confirmation:
        await db.delete_confirmation(confirmation)
    # create new confirmation to ensure email is actually valid
    confirmation = await db.create_confirmation(
        user["id"], CHANGE_EMAIL, request_body.email
    )
    link = make_confirmation_link(request, confirmation)
    try:
        await send_email_from_template(
            request,
            from_=product.support_email,
            to=request_body.email,
            template=await get_template_path(request, "change_email_email.jinja2"),
            context={
                "host": request.host,
                "link": link,
            },
        )
    except Exception as err:  # pylint: disable=broad-except
        _logger.error("Can not send email")
        await db.delete_confirmation(confirmation)
        raise web.HTTPServiceUnavailable(reason=MSG_CANT_SEND_MAIL) from err
    return flash_response(MSG_CHANGE_EMAIL_REQUESTED)