[fixed] Can not send the email

I use sparkpost mail to send email.
tested with CURL can send email successfully.

but with discourse, always get this error:

Sent mail to MYEMAIL@gmail.com (695.6ms)
Job exception: 500 5.5.2 unrecognized command

Sent mail to MYEMAIL@gmail.com (684.1ms)
Job exception: 500 5.5.2 unrecognized command

I’ve already set app.yml SiteSetting.notification_email options.

how can I fix it?

Can you show us your mail-related settings? (makes sure you hide your credentials though)

sure thing.

my config:

DISCOURSE_SMTP_ADDRESS: smtp.sparkpostmail.com
#DISCOURSE_SMTP_PORT: 587                        # (optional, default 587)
DISCOURSE_SMTP_USER_NAME: SMTP_Injection
DISCOURSE_SMTP_PASSWORD: API keys( working with curl test)
## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

- exec: rails r "SiteSetting.notification_email='noreply@myownweb.com'"

thanks.

You might uncomment the port setting. I had this problem when I moved over yesterday.

Please let me know if that fixes it.

1 Like

hi ,Jay, indeed, that fixed the problem.

thanks. it’s a bug or something?

I’m not sure. standalone.yml indicates that the default SMTP port is 587 and TLS defaults to true, but that seems not to be the case. @codinghorror?

Not sure:

https://www.fastmail.com/help/technical/ssltlsstarttls.html

SMTP uses port 25, but SSL/TLS encrypted SMTP uses port 465.

Many sites now disable plain IMAP (port 143) and plain POP (port 110) altogether so people must use an SSL/TLS encrypted connection. By disabling ports 143 and 110, this removes completely STARTTLS as even an option for IMAP/POP connections.

The one real exception to the above is SMTP. However that’s for a different reason again. Most email software used SMTP on port 25 to submit messages to the email server for onward transmission to the destination. However, SMTP was originally designed for transfer, not submission. So yet another port (587) was defined for message submission. Although port 587 doesn’t mandate requiring STARTTLS, the use of port 587 became popular around the same time as the realisation that SSL/TLS encryption of communications between clients and servers was an important security and privacy issue.

The result is that in most cases, systems that offer message submission over port 587 require clients to use STARTLS to upgrade the connection and also require a username and password to authenticate.

Currently, things seem relatively randomly split between people using SMTP SSL/TLS encrypted over port 465, and people using SMTP with STARTTLS upgrading over port 587.

1 Like

This right here seems to indicate to me that the default SMTP port “for Discourse” is `25:
https://github.com/discourse/discourse/blob/be3a5a56ccc284b352aa65080fc6b955f73cc72a/config/discourse_defaults.conf#L61-L62

Not sure if changing this default is a good idea - you might find it breaks peoples installs.

2 Likes

https://github.com/discourse/discourse_docker/pull/256

Looks like SMTP port is also missing from the setup script:
https://github.com/discourse/discourse_docker/blob/33c14f532ea2d7067514046c2fd3991a2f26e231/discourse-setup#L246

1 Like

I’m not completely sure this is a correct statement per our Docker image though. I need to check some things.

1 Like

OK! I checked into this and it seems TLS can be used on, well, any port really…

https://www.fastmail.com/help/technical/ssltlsstarttls.html

I went ahead and made the port selectable in the ./discourse-setup script, with a value of 587 as the default that gets written to the app.yml file. That way we are no longer relying on implicit defaults, the app.yml will have the actual SMTP port specified.

(For the record, I’ve used the default – that is, leaving that line commented out – with mailgun and mandrill for ages and never had issues. But I think it’s best to be explicit here.)

2 Likes