# Password reset email

> This page is about FlutterFlow (the app builder you use by describing your app), not FlutterFlow Studio.

URL: https://docs.flutterflow.io/ffx/password-reset-email

Change the sender, link, subject, and message of the email that your app's users get when they reset their password, in Project Settings › Emails.

When you're done, the people who use your app get a password reset email with your own sender name, subject, and message, and its link opens the page that you chose.

The password reset email is for apps with **Email and password** sign-in. See [Add sign-in](https://docs.flutterflow.io/ffx/add-sign-in).

## Open the email {#open}

Owners and developers can change the emails. Viewers and billing members can't see them. See [Team roles](https://docs.flutterflow.io/ffx/roles).

1. Open **Project Settings › Emails**.
2. Next to **Password reset**, click **Edit**.

The editor shows the email's fields and, beside them, a **Preview** of the email with example values. To switch the preview between the two bodies, select **HTML** or **Plain text**.

## Sender {#sender}

In the **Sender** card:

- **Sender name**: the name that the email shows as its sender. If you leave it empty, the email uses your app's name. Only the name changes: the address that sends the email stays FlutterFlow's.
- **Reply-to address**: where replies go, such as `support@example.com`. If you don't want replies, leave it empty.

## Link destination {#link}

In the **Link destination** card, under **The link opens**, select one:

- **Platform-hosted reset page**: a FlutterFlow page where people choose a new password. You don't need to build anything. See [What people see](#reset-page).
- **Your own page**: a page in your app or on your site that finishes the reset. In **Your page’s address**, enter an `https` address, or an app link whose scheme is a reverse domain, such as `com.example.app://reset`. Don't include a `#` part. The link adds `?mode=resetPassword&oobCode=…` to the address.

## Subject and message {#message}

In the **Message** card:

1. In **Subject**, enter the subject line. Keep it on one line.
2. To change the body that most mail apps show, select **HTML** and edit it.
3. To change the body for mail apps that don't show HTML, select **Plain text** and edit it.

### Variables {#variables}

To add a value that changes with each email, write a variable in double braces, such as `{{appName}}`, in the subject or a body. FlutterFlow fills it in when it sends the email. To copy a variable, click the copy button next to it in the **Variables** card.

| Variable | What it holds |
| --- | --- |
| `{{appName}}` | Your app's name. |
| `{{email}}` | The account's sign-in email: the recipient. |
| `{{resetLink}}` | **Required.** The single-use link that opens the page where the person chooses a new password. |
| `{{expiresInMinutes}}` | How many minutes the link works for. |

`{{resetLink}}` must be in both the HTML body and the plain-text body.

## Save {#save}

1. Check the email in the **Preview**.
2. Click **Save**.

**Result:** The next password reset email that FlutterFlow sends uses your changes.

To drop your unsaved changes instead, click **Discard changes**.

## Reset to default {#reset-to-default}

**Reset to default** appears after you've saved changes to the email.

1. Click **Reset to default**.
2. In the **Reset the password reset email?** dialog, click **Reset to default**.

**Result:** The sender name, reply-to address, link, subject, and both bodies go back to FlutterFlow's default, and any unsaved changes are dropped. The next email uses the default.

## Who gets the email {#who-gets-it}

FlutterFlow sends the password reset email when someone asks your app to reset their password. It sends the email only when the address belongs to an email and password account that isn't disabled. Your app gets the same answer either way, so it doesn't reveal whether someone has an account.

## What people see {#reset-page}

The link in the password reset email works once and expires after 60 minutes.

If the email uses **Platform-hosted reset page**, the link opens a page titled **Choose a new password**:

1. The person enters their new password in **New password** and **Confirm new password**.
2. They click **Change password**.

The page shows **Password changed**, and every device signed in to their account is signed out. The new password must be at least as long as your app's **Shortest password**. See [Sign-in options](https://docs.flutterflow.io/ffx/sign-in-options#accounts-and-sessions).

If the link has expired or was already used, the page says **This link can’t be used** after they click **Change password**, and asks them to request another email.

<Mock name="reset-page" alt="The platform-hosted Choose a new password page with the New password and Confirm new password fields and the Change password button, empty." />

## Reset limits {#request-limit}

If someone asks for too many password reset emails for the same address in a short time, FlutterFlow refuses your app's request with "Too many password-reset requests for this email." A link that was already sent keeps working until it's used or expires. For what to tell the person, see [Troubleshoot your live app](https://docs.flutterflow.io/ffx/troubleshoot-live-app#too-many-reset-requests).

## Troubleshooting {#if-something-goes-wrong}

- [The reset link has expired](https://docs.flutterflow.io/ffx/troubleshoot-live-app#reset-link-expired)
- [The reset link was already used or isn't valid](https://docs.flutterflow.io/ffx/troubleshoot-live-app#reset-link-invalid)
- ["Couldn’t load the emails."](https://docs.flutterflow.io/ffx/troubleshoot-live-app#couldnt-load-emails)
- ["Couldn’t load the email."](https://docs.flutterflow.io/ffx/troubleshoot-live-app#couldnt-load-email)
- ["Someone else saved this email while you were editing"](https://docs.flutterflow.io/ffx/troubleshoot-live-app#email-edited-elsewhere)
