Some notes I made following setting up the mail-receiver
container, using the instructions below
https://meta.discourse.org/t/straightforward-direct-delivery-incoming-mail/49487
These instructions are written in a weird way. They are ‘sort-of’ clear, until you try to follow them and then you realise there’s lots of little uncertainties left!
API Keys
- The tutorial on Meta didn’t say what kind of API key you need. I used an ‘all-users’ one and it worked fine. I guess the mail-receiver needs to be able to post as potentially any user that might reply via email
Placeholder templates for containers/mail_receiver.yml
- Unless you have a weird setup, the
mail_receiver
container and theapp
(Discourse) container are on the same machine, at the same subdomain and domain. So if you put in that domain here, the placeholders below will give you copy and pastable text. This placeholder assumes you are using HTTPS like a good boy/girl.
MAIL_DOMAIN==DOMAIN=
DISCOURSE_MAIL_ENDPOINT=https://=DOMAIN=/admin/email/handle_mail
Firewalls on servers
- Check you have port 25 open in your firewall (unless you used a different port) - I had been into my server management platform and changed the firewall but the settings didn’t save the first time, this was discovered when going back to check.
HTTPS/HTTP for the Discourse API endpoint
-
Check that
DISCOURSE_MAIL_ENDPOINT
is correct including http/https scheme, depending what you are using. The placeholder inmail-receiver.yml
uses http, and then I was thinking ‘maybe it doesn’t need HTTPS because they are on the same box and it’s a local connection’, etc, etc. Suffice to say, if you are using HTTPS only on your Discourse instance, it doesn’t connect unless you also use HTTPS here. -
It would have been all that much clearer if they had called this
DISCOURSE_API_ENDPOINT
, because that’s what it is. The normal Discourse API. It’s got nothing to do with mail specifically. The mail-receiver is the bit handling mail.
Debugging
do all these from your development machine NOT the server we are trying to connect to!
-
check you can resolve the MX record
dig +short MX =DOMAIN=
-
check you can connect to the server on port 25
nc -zvw3 =DOMAIN= 25
(command explanation here) -
then try telnet
telnet =DOMAIN= 25
(explanation and next steps here) -
then go onto the Discourse server to look in the mail-receiver logs and see that something is coming through.
./launcher logs mail-receiver
-
then look at the Discourse logs via the web interface at https://=DOMAIN=/logs