Problema di configurazione email [Zoho]

Sto configurando una nuova installazione su Ubuntu, sto usando Zoho come provider di posta elettronica. Ho abilitato l’autenticazione a due fattori (2FA) per l’account admin ma non per l’account noreply, quindi sto usando la password dell’applicazione 2FA che ho creato per la password SMTP.

Ho il sito web in esecuzione dietro NGINX, le email sono l’unico problema che sto riscontrando al momento.

Ecco l’output del mio discourse doctor:

DISCOURSE DOCTOR Sun Nov 23 06:50:30 UTC 2025

OS: Linux node-1 6.8.0-87-generic #88-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 09:28:41 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux



Found containers/app.yml



==================== YML SETTINGS ====================

DISCOURSE_HOSTNAME=forums.website.co.uk

SMTP_ADDRESS=smtp.zoho.eu

DEVELOPER_EMAILS=REDACTED 

SMTP_PASSWORD=REDACTED 

SMTP_PORT=587



LETSENCRYPT_ACCOUNT_EMAIL=REDACTED 



==================== DOCKER INFO ====================

DOCKER VERSION: Docker version 29.0.2, build 8108357



DOCKER PROCESSES (docker ps -a)



CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                                     NAMES

706f63d5ced8   local_discourse/app   "/sbin/boot"   11 minutes ago   Up 11 minutes   0.0.0.0:9888->80/tcp, [::]:9888->80/tcp   app



Discourse container app is running



==================== PLUGINS ====================

          - git clone https://github.com/discourse/docker_manager.git



No non-official plugins detected.



See https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb for the official list.



========================================

Discourse version at forums.website.co.uk: NOT FOUND

Discourse version at localhost: NOT FOUND



==================== MEMORY INFORMATION ====================

OS: Linux

RAM (MB): 59013



               total        used        free      shared  buff/cache   available

Mem:           56279        3618       39659         124       13752       52661

Swap:           8191           0        8191



==================== DISK SPACE CHECK ====================

---------- OS Disk Space ----------

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2       6.5T   20G  6.2T   1% /



==================== DISK INFORMATION ====================

Disk /dev/sda: 6.55 TiB, 7201260396544 bytes, 14064961712 sectors

Disk model: LOGICAL VOLUME  

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 262144 bytes / 1572864 bytes

Disklabel type: gpt

Disk identifier: F7288ACB-CABA-4C6C-8024-D51FD6F8704E

Device     Start         End     Sectors  Size Type

/dev/sda1   2048        4095        2048    1M BIOS boot

/dev/sda2   4096 14064959487 14064955392  6.5T Linux filesystem



==================== END DISK INFORMATION ====================



==================== MAIL TEST ====================

For a robust test, get an address from http://www.mail-tester.com/

Sending mail to REDACTED  . . 

Testing sending to jordan@website.co.uk using smtp.zoho.eu:587, username:admin@website.co.uk with login auth.

SMTP server connection successful.

Sending to jordan@website.co.uk…

==================================== ERROR =====================================

Sending mail failed:

EOFError: end of file reached

=================================== SOLUTION ===================================

Post this output to https://meta.discourse.org/ for assistance.

================================================================================



==================== DONE! ====================

La mia configurazione di app.yml:

## this is the all-in-one, standalone Discourse Docker container template

##

## After making changes to this file, you MUST rebuild

## /var/discourse/launcher rebuild app

##

## BE *VERY* CAREFUL WHEN EDITING!

## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!

## visit http://www.yamllint.com/ to validate this file as needed



templates:

  - "templates/postgres.template.yml"

  - "templates/redis.template.yml"

  - "templates/web.template.yml"

  - "templates/web.ratelimited.template.yml"

  ## Uncomment these two lines if you wish to add Lets Encrypt (https)

  ## - "templates/web.ssl.template.yml"

  ## - "templates/web.letsencrypt.ssl.template.yml"



## which TCP/IP ports should this container expose?

## If you want Discourse to share a port with another webserver like Apache or nginx,

## see 
 for details

expose:

  - "9888:80"   # http
#  - "443:443" # https



params:

  db_default_text_search_config: "pg_catalog.english"



  ## Set db_shared_buffers to a max of 25% of the total memory.

  ## will be set automatically by bootstrap based on detected RAM, or you can override
  db_shared_buffers: "4096MB"



  ## can improve sorting performance, but adds memory usage per-connection

  #db_work_mem: "40MB"



  ## Which Git revision should this container use? (default: latest)

  #version: latest



env:

  LC_ALL: en_US.UTF-8

  LANG: en_US.UTF-8

  LANGUAGE: en_US.UTF-8

  # DISCOURSE_DEFAULT_LOCALE: en



  ## How many concurrent web requests are supported? Depends on memory and CPU cores.

  ## will be set automatically by bootstrap based on detected CPUs, or you can override

  UNICORN_WORKERS: 8



  ## TODO: The domain name this Discourse instance will respond to

  ## Required. Discourse will not work with a bare IP number.

  DISCOURSE_HOSTNAME: forums.website.co.uk



  ## Uncomment if you want the container to be started with the same

  ## hostname (-h option) as specified above (default "$hostname-$config")

  #DOCKER_USE_HOSTNAME: true



  ## TODO: List of comma delimited emails that will be made admin and developer

  ## on initial signup example 'user1@example.com,user2@example.com'

  DISCOURSE_DEVELOPER_EMAILS: 'blood@website.co.uk,admin@website.co.uk'



  ## TODO: Configure the mail server

  ##       (used for validation of new accounts, notifications, digests, etc.)

  ## required: hostname of the SMTP mail server used to send mail

  DISCOURSE_SMTP_ADDRESS: smtp.zoho.eu

  ## uncomment to set the port to something other than the default (25)

  DISCOURSE_SMTP_PORT: 587

  ## USER_NAME / PASSWORD required if the SMTP provider needs authentication

  ## WARNING: a '#' in the SMTP password can be misinterpreted; ensure it's inside string quotes, e.g.:

  ##   DISCOURSE_SMTP_PASSWORD: "#pass#ord"

  DISCOURSE_SMTP_USER_NAME: admin@website.co.uk

  DISCOURSE_SMTP_PASSWORD: "app-password"

  ## uncomment to enable implicit TLS at connection time, probably needed for using port 465

  DISCOURSE_SMTP_FORCE_TLS: false

  DISCOURSE_SMTP_ENABLE_START_TLS: true

  ## uncomment to set the HELO/EHLO domain, only set if required by provider

  DISCOURSE_SMTP_DOMAIN: website.co.uk

  ## the address from which notifications are sent

  DISCOURSE_NOTIFICATION_EMAIL: noreply@wesbite.co.uk

  ## uncomment to change server certificate verification

  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none # peer|none

  ## uncomment to override the authentication method

  DISCOURSE_SMTP_AUTHENTICATION: login # plain|login|cram_md5



  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate

  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com



  ## The http or https CDN address for this Discourse instance (configured to pull)

  ## see 
 for details

  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com



  ## The maxmind geolocation IP account ID and license key for IP address lookups

  ## see 
 for details

  #DISCOURSE_MAXMIND_ACCOUNT_ID: 123456

  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456



## The Docker container is stateless; all data is stored in /shared

volumes:

  - volume:

      host: /var/discourse/shared/standalone

      guest: /shared

  - volume:

      host: /var/discourse/shared/standalone/log/var-log

      guest: /var/log



## Plugins go here

## see 
 for details

hooks:

  after_code:

    - exec:

        cd: $home/plugins

        cmd:

          - git clone https://github.com/discourse/docker_manager.git



## Any custom commands to run after building

run:

  - exec: echo "Beginning of custom commands"

  ## If you want to set the 'From' email address for your first registration, uncomment and change:

  ## After getting the first signup email, re-comment the line. It only needs to run once.

  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"

  - exec: echo "End of custom commands"

Ho anche testato la connessione con OpenSSL e mi sta dando il via libera.

Attualmente non sono sicuro di quale sia il problema che impedisce il funzionamento. Ho PiHole configurato davanti sulla rete, anche se ho la stessa email noreply che invia email dalla mia configurazione VaultWarden.

(Sì, sto puntando a un altro anno di installazione (spero) e sono arrivato più lontano di qualsiasi altro tentativo finora.)

Qualsiasi aiuto sarebbe molto apprezzato,
~Blood