Не удается интегрироваться с SendGrid

Здравствуйте,

Я пытаюсь использовать сервис отправки электронной почты SendGrid, но в логах постоянно появляется эта ошибка:

Исключение в задаче: 535 Ошибка аутентификации: неверное имя пользователя или пароль

Не уверен, в чём моя ошибка. Вот как выглядит моя конфигурация:

 DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
 DISCOURSE_SMTP_PORT: 587
 DISCOURSE_SMTP_USER_NAME: apiKey
 DISCOURSE_SMTP_PASSWORD: 'SG.xxxx.xxxxxx.xxxx'

Я также попробовал использовать порт 2525 по рекомендации с Fresh install. Works. Sendgrid not sending emails - #5 by Ham, но это тоже не помогло.

Установить соединение через telnet мне удаётся.

Кто-нибудь может помочь? Есть какие-то идеи, что я делаю не так?

С того же сервера, на котором размещён ваш Discourse?

Извините, если это глупый вопрос, но действительно ли имя пользователя SendGrid — apiKey?

:thinking:

Я спрашиваю лишь потому, что это необычный выбор имени учётной записи…

Да

Нет, я не думаю, что в SendGrid есть понятие «имя пользователя». Я просто следовал документации здесь: discourse/docs/INSTALL-email.md at main · discourse/discourse · GitHub

Возможно, я ошибаюсь, но в своём аккаунте SendGrid я не вижу никакой информации об имени пользователя.

Они используют другую терминологию, но вы всё равно подключаетесь к тому, что по сути является стандартным SMTP-сервером, для которого требуется аутентификация.

Перейдите в раздел Teammateshttps://app.sendgrid.com/settings/teammates

Там вы увидите учётные данные, которые могут отправлять электронную почту:

Значение в столбце «Username» — это то, что нужно ввести в настройке Discourse DISCOURSE_SMTP_USER_NAME.

Так что, если «Username» был SK2019, у вас будет что-то вроде:

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: SK2019
DISCOURSE_SMTP_PASSWORD: 'xxxx.xxxxxx.xxxx'

Я пробовал это, но не сработало. В документации SendGrid указано использовать apiKey в качестве имени пользователя, но, похоже, это не работает.

Возможно, мне стоит обратиться к команде SendGrid и попросить их помощи.

Вы использовали apiKey при использовании telnet?

Да, я следовал инструкциям по адресу How to send an Email with SMTP | SendGrid Docs | Twilio, и они сработали! Не уверен, что я упустил в конфигурации Discourse.

Выглядят ли четыре строки в вашем файле конфигурации так же, как мои (выше)?

С правильным DISCOURSE_SMTP_USER_NAME, который совпадает с тем, что отображается на странице «Teammates» в SendGrid?

Да, имя пользователя — это то, что отображается на странице Teammates, пароль — это ключ, который я сгенерировал (telnet работает с этим ключом), а два других поля полностью совпадают.

Можете подсказать, какую версию Discourse вы используете? Я использую бета-версию, и подозреваю, что проблема может быть в этом.

В любом случае, я планирую перейти на Mailgun. Попробовал сегодня, и всё работает безупречно (хотя это дорого, но других вариантов на данный момент нет).

Кстати, @Satwik_Kansal, наше имя пользователя для API Sendgrid — “apikey”, а не “apiKey”. Всё отлично работает.

Та же проблема. Если коротко: что делать? Использовать “apikey” (не работает) или добавить участника команды (поле пустое)?

Для справки: документация делает это довольно запутанным, и это не первый раз, когда я гуглю именно эту проблему, пытаясь найти решение.

В документации сейчас указано:

SendGrid — 40 000 писем за 30-дневный пробный период

Адрес SMTP-сервера? smtp.sendgrid.net
Имя пользователя SMTP?      apikey
Пароль SMTP?       [API-ключ SendGrid]

РЕДАКТИРОВАНИЕ: Я думаю, что людей сбивает с толку то, что они (как и я) думают, что «apikey» означает «вставьте сюда свой API-ключ», но на самом деле его нужно оставить без изменений!

Сумасшествие, правда?

Думаю, это застало врасплох 99% тех, кто пытался это сделать :confused:

(я сам не исключение в то время)