# Парсинг SMTP-учетных данных в Discourse Doctor не работает (+ не работает email регистрации администратора)

**URL:** https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461
**Category:** Support
**Created:** [28.Декабрь.2020 23:38:47 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461 "2020-12-28T23:38:47Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [28.Декабрь.2020 23:38:47 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/1 "2020-12-28T23:38:47Z")

</div>

Что ж, для начала: это рабочая среда, и я не могу отправить первое письмо с подтверждением регистрации.

Я уверен, что мои настройки SMTP верны.  
Я могу выполнить ping и telnet на мой почтовый сервер через используемый порт, но как только я отправляю команду «EHLO mailserver», соединение закрывается удалённым хостом.

В конце моих логов указано:

```plaintext
  Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.2ms | Allocations: 32)
Delivered mail f3853b94-b772-48c2-b1b7-a78bbcbfc5c1@discourse.mywebsite.com (60177.6ms)
Job exception: Net::ReadTimeout

```

Я попытался убедиться, что мои настройки SMTP верны, поэтому запустил /var/discourse/discourse-doctor, но он не может проверить мои настройки. Он выводит:

```plaintext
==================== YML SETTINGS ====================
awk: not an option: --field-separator=:
DISCOURSE_HOSTNAME=
awk: not an option: --field-separator=:
SMTP_ADDRESS=
awk: not an option: --field-separator=:
DEVELOPER_EMAILS=
awk: not an option: --field-separator=:
SMTP_PASSWORD=
awk: not an option: --field-separator=:
SMTP_PORT=
awk: not an option: --field-separator=:
SMTP_USER_NAME=
awk: not an option: --field-separator=:
LETSENCRYPT_ACCOUNT_EMAIL=

```

Однако мой YAML-файл (`./containers/app.yml`) выглядит абсолютно корректным:

```plaintext
  ## TODO: The SMTP mail server used to validate new accounts and send notifications
  # SMTP ADDRESS, username, and password are required
  # WARNING the char '#' in SMTP password can cause problems!
  DISCOURSE_SMTP_ADDRESS: mail.redacted.com
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: redacted@redacted.com
  DISCOURSE_SMTP_PASSWORD: "redacted"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)

  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: redacted@redacted.com

```

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [29.Декабрь.2020 00:22:17 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/2 "2020-12-29T00:22:17Z")

</div>

> [@simbleau](#):
>
> Как только я ввожу «EHLO mailserver», соединение закрывается удалённым хостом.

Похоже, это нужно исправить. Это согласуется с ошибкой сети, которую вы описали.

Мне кажется, что специальные символы в вашем пароле сбивают с толку Discourse-doctor.

---

<div class="post-metadata">

### Author: ![irwinstar](https://avatars.discourse-cdn.com/v4/letter/i/f1d935/32.png) [@irwinstar](https://meta.discourse.org/u/irwinstar)
#### Post date: [29.Декабрь.2020 13:26:25 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/3 "2020-12-29T13:26:25Z")

</div>

> [@simbleau](#):
>
> `DISCOURSE_SMTP_ADDRESS: mail.redacted.com`

Этот адрес, похоже, не является SMTP-адресом.  
Полагаю, что «[mail.redacted.com](http://mail.redacted.com)» — это HTTP-адрес.  
Думаю, вам стоит это проверить.

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [29.Декабрь.2020 13:39:27 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/4 "2020-12-29T13:39:27Z")

</div>

> [@irwinstar](#):
>
> Этот адрес, похоже, не является SMTP-адресом.  
> Я предполагаю, что «[mail.redacted.com](http://mail.redacted.com)» — это HTTP-адрес.  
> Думаю, вам стоит это проверить.

@irwinstar, я скрыл реальный почтовый сервер, чтобы не раскрывать его на публичном форуме. Но я могу гарантировать, что настройки верны, так как я скопировал их из своего почтового клиента (работающего) и также сравнил их с настройками SMTP моего реального почтового сервера.

Спасибо за предложение помочь. Я думаю, что проблема в записях SPF/DKIM, поэтому я пытаюсь исправить их.

Тем не менее, `discourse-doctor` всё ещё должен корректно её парсить. Не совсем понятно, что происходит, так как я сам не редактировал этот файл в vim/nano. Для ясности: YAML был сгенерирован с помощью `discourse-setup`.

---

<div class="post-metadata">

### Author: ![irwinstar](https://avatars.discourse-cdn.com/v4/letter/i/f1d935/32.png) [@irwinstar](https://meta.discourse.org/u/irwinstar)
#### Post date: [29.Декабрь.2020 13:45:18 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/5 "2020-12-29T13:45:18Z")

</div>

И я думаю, что Discourse сейчас не поддерживает протокол на порту 465. Если ваш почтовый сервер поддерживает порт 587, вы можете изменить его на 587. К сожалению, мой почтовый сервер не может использовать порт 587, поэтому я добавил почтовый прокси вне Discourse.

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [29.Декабрь.2020 13:46:20 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/6 "2020-12-29T13:46:20Z")

</div>

@irwinstar, если это верно, то это крайне важная информация, которая могла бы объяснить, почему не работает моя настройка электронной почты. У вас есть источник этой информации?

---

<div class="post-metadata">

### Author: ![irwinstar](https://avatars.discourse-cdn.com/v4/letter/i/f1d935/32.png) [@irwinstar](https://meta.discourse.org/u/irwinstar)
#### Post date: [29.Декабрь.2020 13:55:27 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/7 "2020-12-29T13:55:27Z")

</div>

Я не уверен в этом, но я пробовал порт 465 несколько раз. В конце концов я использовал Docker-образ «hieulq/mailproxy» в качестве почтового прокси. Для Discourse я применил следующие настройки в app.yml:

```
  DISCOURSE_SMTP_ADDRESS: x.x.x.x
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_AUTHENTICATION: none
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
  DISCOURSE_SMTP_ENABLE_START_TLS: false

```

Такой подход может показаться неидеальным, но он работает. Сегодня я попытался найти почтовый плагин, но ничего не нашёл.

---

<div class="post-metadata">

### Author: ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)
#### Post date: [29.Декабрь.2020 14:30:20 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/8 "2020-12-29T14:30:20Z")

</div>

Привет @simbleau

По моему опыту, SendGrid работает отлично (порт 587).

Вы также можете протестировать SendGrid бесплатно!

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [29.Декабрь.2020 14:32:50 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/9 "2020-12-29T14:32:50Z")

</div>

Спасибо за предложения.

Я пытаюсь избежать покупки облачных почтовых серверов или использования прокси (потому что, если бы я хотел грязное решение, я бы просто взломал учётную запись администратора), когда у меня уже есть почтовый сервер на HostGator.

Я уверен, что SPF-записи настроены для IP-адреса моего сервера Discourse. Сейчас я просто пытаюсь проверить DKIM-записи.

~~Если кто-то сможет подтвердить, что порт 465 не разрешён, это будет отличной новостью, так как это остановит меня от углубления в кроличью нору проблемы, которой на самом деле нет.~~ Порт 465 был проблемой, об этом указано в сообщении ниже.

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [29.Декабрь.2020 15:41:33 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/10 "2020-12-29T15:41:33Z")

</div>

Я добился некоторого прогресса в настройке установки.

Используя порт 587, я успешно выполнил telnet-подключение для отправки полного письма и прошел аутентификацию без проблем. Поэтому я переключился на него.

Теперь при отправке письма я получаю следующую ошибку:

```plaintext
Delivered mail d86b48cc-b0f4-4df3-8960-ab5ff96613a0@discourse.imbleau.com (251.0ms)
Job exception: hostname "mail.redacted.com" does not match the server certificate

```

Однако я заметил, что это больше не тайм-аут соединения (который срабатывал после полных 60 секунд), а другое исключение, возникающее за 250 мс.

Вероятно, это связано с тем, что я использовал адрес [system@discourse.redacted.com](mailto:system@discourse.redacted.com), который внутренне использует почтовый сервер [mail.redacted.com](http://mail.redacted.com).

Честно говоря, я не уверен, как это исправить. Я попробовал следующее:

```plaintext
./launcher enter app
rails r "SiteSetting.notification_email = 'system@mail.redacted.com'"
exit

```

а затем пересобрал контейнер, чтобы применить это изменение единожды. Но результата нет — та же ошибка.

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [29.Декабрь.2020 15:55:09 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/11 "2020-12-29T15:55:09Z")

</div>

ИСПРАВЛЕНА ПРОБЛЕМА С ЭЛЕКТРОННОЙ ПОЧТОЙ! (discourse-doctor всё ещё парсит неправильно)

Я немного подробнее изучил Ruby и причины возникновения этой ошибки, что привело меня к [этому вопросу на Stack Overflow](https://stackoverflow.com/questions/13408898/hostname-does-not-match-the-server-certificate-cannot-send-email).

Именно это было причиной. Решение заключалось в изменении настройки SSL-согласования, что подсказало мне отключить этот параметр в файле app.yml:  
` DISCOURSE_SMTP_ENABLE_START_TLS: false # (опционально, по умолчанию true)`

После этого — УСПЕХ!

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [29.Декабрь.2020 17:16:24 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/12 "2020-12-29T17:16:24Z")

</div>

> [@simbleau](#):
>
> DISCOURSE\_SMTP\_ENABLE\_START\_TLS: false # (необязательный параметр, по умолчанию true)

Это отключит шифрование TLS, в то время как «единственная» проблема заключается в том, что вы используете неверное имя хоста: сервер почты представляет сертификат, в котором указано что-то другое, а не `mail.redacted.com`. Многие почтовые серверы часто известны под несколькими разными именами хостов; вам нужно лишь выяснить, какое из них используется в их сертификате.

Вы можете попытаться узнать, какое имя хоста он заявляет, и соответственно настроить вашу конфигурацию.

`echo | openssl s_client -connect mail.redacted.com:587 -starttls smtp -servername mail.redacted.com 2>/dev/null |openssl x509 -noout -subject`

Если это не сработает, вы можете оставить шифрование TLS включенным и ОТКЛЮЧИТЬ ТОЛЬКО проверку сертификата:

```
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: false

```

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [29.Декабрь.2020 17:35:19 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/13 "2020-12-29T17:35:19Z")

</div>

Спасибо @RGJ! Странно, что CN указан как один из моих поддоменов, никак не связанный с почтой. Это стоит проверить. Благодарю за подсказку.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [30.Декабрь.2020 17:19:28 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/14 "2020-12-30T17:19:28Z")

</div>

> [@simbleau](#):
>
> Я убрал реальный почтовый сервер, чтобы не раскрывать его на публичном форуме.

Все ваши пользователи получат одинаковую информацию.

> [@simbleau](#):
>
> Тем не менее, `discourse-doctor` всё равно должен корректно его анализировать.

Если вы в личном порядке поделитесь со мной своим `app.yml`, я постараюсь разобраться, что именно сбивает с толку `discourse-doctor`.

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [30.Декабрь.2020 21:26:27 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/15 "2020-12-30T21:26:27Z")

</div>

Отправлено. Попробуй свои силы.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [30.Декабрь.2020 21:38:44 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/16 "2020-12-30T21:38:44Z")

</div>

> [@simbleau](#):
>
> ```plaintext
> awk: некорректный параметр: --field-separator=:
> 
> ```

Ага. Проблема в том, что у вас установлена версия `awk`, отличная от GNU awk, и параметр `--field-separator` в вашей версии называется иначе.

Какая у вас версия `awk`? Какую операционную систему вы используете?

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [01.Январь.2021 00:55:42 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/17 "2021-01-01T00:55:42Z")

</div>

`man awk` сообщает: `Version 1.3.4 2019-12-31 MAWK(1)`

`cat /etc/os-release` выводит:

```plaintext
~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

```

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [04.Январь.2021 19:42:37 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/18 "2021-01-04T19:42:37Z")

</div>

Не могли бы вы отредактировать `discourse-doctor` и заменить `--field-separator` на `-F`?

Кажется, это решит проблему. Если вы подтвердите, я отправлю PR.

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [05.Январь.2021 12:15:11 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/19 "2021-01-05T12:15:11Z")

</div>

Это отчасти сработало. Ошибка исчезла, но теперь ничего не возвращается.

```
==================== НАСТРОЙКИ YML ====================
DISCOURSE_HOSTNAME=
SMTP_ADDRESS=
DEVELOPER_EMAILS=
SMTP_PASSWORD=
SMTP_PORT=
SMTP_USER_NAME=
LETSENCRYPT_ACCOUNT_EMAIL=

```

---

<div class="post-metadata">

### Author: ![simbleau](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simbleau/32/204367_2.png) [@simbleau](https://meta.discourse.org/u/simbleau)
#### Post date: [05.Январь.2021 12:29:36 UTC](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461/20 "2021-01-05T12:29:36Z")

</div>

Я решил это.

В discourse-doctor измените строку 213 на следующую:

```
  read_config_result=$(echo $config_line | awk -F ":" '{print $2}')

```

Это работает, потому что mawk не любит `-F=":"`, вместо этого он буквально требует пробел, как в `-F ":"`. 🙄

Открыл PR: [Changed awk config command to be more cross platform by nuzzles · Pull Request #513 · discourse/discourse\_docker · GitHub](https://github.com/discourse/discourse_docker/pull/513)

[Следующая страница](https://meta.discourse.org/t/discourse-doctor-parsing-smtp-credentials-not-working-admin-registration-email-not-working/174461.md?page=2)
