immich icon indicating copy to clipboard operation
immich copied to clipboard

Email Styling and Redirection Issues in Gmail

Open VictorHachard opened this issue 1 year ago • 5 comments
trafficstars

The bug

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

  • When I receive the email, the styling is not like the screen is the release note.
  • When clicking on the button, the redirection URL is incorrect, leading to a 404 error.

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

  • [X] Server
  • [ ] Web
  • [ ] Mobile

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

VictorHachard avatar May 17 '24 19:05 VictorHachard

Thanks, the double / is the issue

alextran1502 avatar May 17 '24 20:05 alextran1502

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.

Snowknight26 avatar May 17 '24 22:05 Snowknight26

Let's instead normalize it in getConfig instead.

jrasm91 avatar May 17 '24 22:05 jrasm91

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 avatar May 18 '24 09:05 VictorHachard

INFO: not fixed in v1.107.2

VictorHachard avatar Jul 09 '24 07:07 VictorHachard