Skip to content
Back

Problem with email links

  • 0
  • 2
  • Auth
🐨 JaviR3TicS
22 Dec, 2025, 22:45

Hi. I'm receiving emails without working links, the text that is suposed to be a link is plain text...

TL;DR
Email links are being stripped by Google due to the use of app schemes or non-secure URLs without HTTPS. To solve this, consider using universal linking like Expo provides. By hosting a site with the proper configuration for universal links, you can ensure the link is secure. Adjust the code to create a secure HTTPS link instead of a scheme-based one for email redirects.
23 Dec, 2025, 02:00

Are you using appwrite cloud?

23 Dec, 2025, 04:18

What is the link? That you are passing

23 Dec, 2025, 04:20

What might be happening is

  1. You are passing an app scheme like my-app://....
  2. Passing an normal url without https:// as protocol.

Any of these means, your link is being stripped away by google as it is not considering the link secure.

23 Dec, 2025, 08:43

It’s an app scheme. Is there any solution to this?

23 Dec, 2025, 08:54

What are you using for development? RN or Flutter Or normal kotlin?

23 Dec, 2025, 08:54

RN

23 Dec, 2025, 08:54

Expo

23 Dec, 2025, 08:56

Use universal linking For this you would have to host a site. As appwrite provides sites service it would be easy. Try reading this https://docs.expo.dev/linking/into-your-app/ Although in expo go, you cant test it, but in a build you can.

23 Dec, 2025, 09:02

I think I’m already using it. The problem I think it’s what you said before, that the link is being stripped away by Google… Also in the email sent it’s added the word ‘3D’ after some parameters like userId and secret

TypeScript
70968d4d8&secret=3D9dc46a4433894000158c22025a3b46012e0f320b47dea1b17de5da2ab3576a9864e21&expire=3D2025-=
12-22T23%3A30%3A11.665%2B00%3A00```
23 Dec, 2025, 09:03

Could you show me the code?

23 Dec, 2025, 09:03

Sure, give me one minute

23 Dec, 2025, 09:05
TypeScript

import { account } from '@/src/lib/appwrite';

const sendPasswordResetEmail = async (email: string) => {
        setIsLoading(true);
        try {
            const redirectUrl = Linking.createURL('/reset-password-confirm');
            await account.createRecovery(email, redirectUrl);
        } catch (error) {
            throw error;
        } finally {
            setIsLoading(false);
        }
    };
23 Dec, 2025, 09:12

As you can see you are creating redirection url. You have not setup universal links. Normally on apps it pushes the app scheme. But in universal links your redirection link will look yourdomain.com/resetpassword.....

And after configuring the universal links your code will look like

TypeScript

import { account } from '@/src/lib/appwrite';

const sendPasswordResetEmail = async (email: string) => {
        setIsLoading(true);
        try {
            const redirectUrl = "https://yourdomain.com/pass reset screen"
            await account.createRecovery(email, redirectUrl);
        } catch (error) {
            throw error;
        } finally {
            setIsLoading(false);
        }
    };
Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more