immich-app / immich

High performance self-hosted photo and video management solution.
https://immich.app
GNU Affero General Public License v3.0
43.74k stars 2.14k forks source link

Email Styling and Redirection Issues in Gmail #9564

Open VictorHachard opened 3 months ago

VictorHachard commented 3 months ago

The bug

I have configured a mail server with Google. However, I have two issues:

image image

I see in the code that the base URL is concatenated with /auth/login. In my case, the base URL https://xxx/ combined with /auth/login results in the double slashes (https://xxx//auth/login).

image

Also, I am using Nginx with Nginx Proxy Manager. Could this be causing the ending / in my base URL?

The OS that Immich Server is running on

TrueNAS-SCALE-23.10.2

Version of Immich Server

v1.105.1

Version of Immich Mobile App

v1.105.1

Platform with the issue

Your docker-compose.yml content

Running on TrueNAS

Your .env content

Running on TrueNAS

Reproduction steps

1. Configure the mail server with Google in the Immich application.
2. Create a user and send the email.
3. Open the email in Gmail.
4. Observe the incomplete styling of the email.
5. Click on the button within the email.
6. Notice the incorrect redirection URL: https://xxx//auth/login which results in a 404 error due to the double slashes.

Relevant log output

No response

Additional information

No response

alextran1502 commented 3 months ago

Thanks, the double / is the issue

Snowknight26 commented 3 months ago

Probably something as easy as changing the following code block:

https://github.com/immich-app/immich/blob/6b369e84fcad985224cdeb17fd4802de1e55cb75/server/src/services/notification.service.ts#L49-L58

    const { server } = await this.configCore.getConfig();
    const baseUrl = () => {
      let url = 'http://localhost:2283';
      try {
        var url = (new URL(server.externalDomain)).origin;
      } catch (e) {}
      return url;
    }
    const { html, text } = this.notificationRepository.renderEmail({
      template: EmailTemplate.WELCOME,
      data: {
        baseUrl: url,
        displayName: user.name,
        username: user.email,
        password: tempPassword,
      },
    });

(if you don't care about IE you can remove the (e) part).

Ideally this should be earlier on, especially if server.externalDomain is used elsewhere, but this should work.

jrasm91 commented 3 months ago

Let's instead normalize it in getConfig instead.

VictorHachard commented 3 months ago

For the styling issue, I transferred my email to Outlook, and there is no problem. It seems to be an issue with Gmail.

image

VictorHachard commented 2 months ago

INFO: not fixed in v1.107.2