# Проверка API-ключа Mailgun в обратном порядке (API-ключ не требуется, если bounce обрабатываются получателем)

**URL:** https://meta.discourse.org/t/mailgun-api-key-check-backward-no-api-key-should-be-required-if-bounces-handled-by-mail-receiver/305909
**Category:** Bug
**Created:** [29.Апрель.2024 13:42:14 UTC](https://meta.discourse.org/t/mailgun-api-key-check-backward-no-api-key-should-be-required-if-bounces-handled-by-mail-receiver/305909 "2024-04-29T13:42:14Z")
**Posts on this page:** 4
**Page:** 1

<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.Апрель.2024 13:42:14 UTC](https://meta.discourse.org/t/mailgun-api-key-check-backward-no-api-key-should-be-required-if-bounces-handled-by-mail-receiver/305909/1 "2024-04-29T13:42:14Z")

</div>

Я заметил, что множество сайтов жалуются на отсутствие ключа API Mailgun, но (по крайней мере, большинство из) этих сайтов получают ответы через контейнер mail-receiver, который обрабатывает такие отскоки, поэтому ключ API (и соответствующий вебхук в Mailgun) не должны быть обязательными. Похоже, что логика в спецификациях (и, следовательно, в коде) перевернута:

[missing\_mailgun\_api\_key\_spec](https://github.com/discourse/discourse/blob/271ca2c9682e0de8396fb4153e630fef1b61b942/spec/services/problem_check/missing_mailgun_api_key_spec.rb)

Показывает следующее:

```plaintext
    context "when using Mailgun without an API key" do
      let(:replies_enabled) { true }
      let(:mailgun_address) { "smtp.mailgun.org" }
      let(:api_key) { nil }

      it do
        expect(check).to have_a_problem.with_priority("low").with_message(
          "The server is configured to send emails via Mailgun but you haven't provided an API key used to verify the webhook messages.",
        )
      end

```

выдает ошибку, если включены ответы, но в этом случае вебхук нам **не** нужен, и

```plaintext
    context "when replies are disabled" do
      let(:replies_enabled) { false }
      let(:mailgun_address) { anything }
      let(:api_key) { anything }

      it { expect(check).to be_chill_about_it }
    end

```

Здесь мы не обрабатываем отскоки с помощью почтового получателя и остаемся спокойными.

Я запутался или это наоборот?

Ну, возможно, я действительно запутался. Кажется, что почтовый получатель не сообщает Discourse об отскоках. На загруженном сайте нет недавних сообщений об отскоках.

Но:

> [@Discourse](#):
>
> Если электронные письма «отскакивают» (они не могут быть доставлены по какой-то причине), вам нужно об этом знать. Повторная отправка писем, которые отскакивают, приведет к тому, что ваши письма будут помечены как спам. Получение уведомлений об отскоках позволяет вам отключить отправку на несуществующие адреса.

И:

> [@zogstrip](#):
>
> Чтобы включить VERP, установите параметр сайта «`reply by email address`» с шаблоном адреса электронной почты, использующим знак +. Значение по умолчанию
> 
> `replies+%{reply_key}@discourse.example.com`
> 
> … работает отлично. Если вы используете свой собственный или корпоративный почтовый сервер, то всё, это всё 🎉
> 
> Ваш экземпляр Discourse **должен** иметь возможность получать электронную почту, отправленную на этот адрес. Это должно работать через POP, но мы настоятельно рекомендуем [Прямую доставку входящей почты для самохостинговых сайтов](https://meta.discourse.org/t/straightforward-direct-delivery-incoming-mail/49487)

Таким образом, эта документация предполагает, что если у вас есть рабочий почтовый получатель, он должен это обрабатывать. А код, который я когда-то написал в некоторых своих внутренних инструментах для настройки этих вебхуков, гласил: «# вебхуки не нужны, когда у нас есть почтовый получатель»

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [21.Февраль.2026 19:19:28 UTC](https://meta.discourse.org/t/mailgun-api-key-check-backward-no-api-key-should-be-required-if-bounces-handled-by-mail-receiver/305909/2 "2026-02-21T19:19:28Z")

</div>

Я сам только что с этим столкнулся. Если у вас включён почтовый получатель, это предупреждение не имеет смысла. Я просто закрыл предупреждение, прочитав здесь (спасибо Джей!), но не могу не думать, что это можно было бы реализовать лучше. По крайней мере, добавьте ссылку на настройку, чтобы не пришлось её искать (спойлер: она не в настройках электронной почты), а в самой настройке дайте более подробное описание и, возможно, ссылку на тему документации на Meta?

 ![Screenshot 2026-02-21 at 11.10.49 AM](https://global.discourse-cdn.com/meta/original/4X/3/9/6/396d903d7f38378d8fda7f25f430e4a6459ba38f.png)

 ![Screenshot 2026-02-21 at 11.18.38 AM](https://global.discourse-cdn.com/meta/original/4X/1/b/7/1b7fa3c0d181ee1059f7437c1efbbb1fc92723d7.png)

---

<div class="post-metadata">

### Author: ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)
#### Post date: [24.Февраль.2026 15:55:41 UTC](https://meta.discourse.org/t/mailgun-api-key-check-backward-no-api-key-should-be-required-if-bounces-handled-by-mail-receiver/305909/3 "2026-02-24T15:55:41Z")

</div>

В ходе расследования я заметил, что у нас была проверка проблемы только для Mailgun. Поэтому я провёл небольшую рефакторинг, добавив глобальную проверку проблемы «обработка отскоков электронной почты», которая будет работать для всех настроенных нами почтовых провайдеров.

> <https://github.com/discourse/discourse/pull/38028>
>
> The \`MissingMailgunApiKey\` problem check had inverted logic: it warned admins wh…en \`reply\_by\_email\_enabled\` was true (meaning the mail receiver handles bounces via VERP, so no webhook API key is needed), but stayed silent when it was false (meaning bounces aren't being tracked at all). This caused false warnings on sites using the mail-receiver container.
> 
> This commit replaces the Mailgun-only check with a general \`EmailBounceHandling\` check that covers all supported email providers (Mailgun, SendGrid, Mailjet, Mandrill, Postmark, SparkPost, Mailpace, AWS SES). The check now correctly returns \`no\_problem\` when both \`reply\_by\_email\_enabled\` is true \*\*AND\*\* a VERP-capable reply address is configured, since bounces are handled by the mail receiver in that case.
> 
> For providers that previously accepted unauthenticated webhooks with only a log warning (SendGrid, Mailjet, Mandrill, Postmark, SparkPost), the behavior is preserved but upgraded to a Discourse.deprecate call (since 2026.2, drop 2026.5) to signal that authentication will be enforced in a future release.
> 
> Additionally:
> \- Adds Mailpace webhook signature verification (was previously missing)
> \- Adds the mailpace\_verification\_key site setting
> \- Includes a migration to clean up orphaned \`problem\_check\_trackers\` rows from the old \`missing\_mailgun\_api\_key\` check
> 
> https://meta.discourse.org/t/305909

---

<div class="post-metadata">

### Author: ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)
#### Post date: [02.Март.2026 07:00:41 UTC](https://meta.discourse.org/t/mailgun-api-key-check-backward-no-api-key-should-be-required-if-bounces-handled-by-mail-receiver/305909/6 "2026-03-02T07:00:41Z")

</div>

Эта тема была автоматически закрыта через 5 дней. Новые ответы больше не принимаются.
