SMTP with office365?

Hello

I try to use Office365 as SMTP for discourse. I’m already using this account for my wordpress SMTP so the account is not the problem.

When i try to send a email test, an error message appear

[Sender] 504 5.7.4 Unrecognized authentication type [AM3PR05CA0123.eurprd05.prod.outlook.com]

This is my SMTP config from app.yml

## TODO: The SMTP mail server used to validate new accounts and send notifications
DISCOURSE_SMTP_ADDRESS: smtp.office365.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: test@example.fr
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: false 

Any idea how to fix the problem ?

Another config:

## TODO: The SMTP mail server used to validate new accounts and send notifications
DISCOURSE_SMTP_ADDRESS: smtp.office365.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: test@example.fr
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: true

I get the following error:

550 5.7.60 SMTP; Client does not have permissions to send as this sender

The problem is from Discourse, because I can test with swaks and it’s working

swaks --to test@example.com --from test2@example.com --server smtp.office365.com --auth login --auth-user test2@example.com -tls

Not Suggesting that You use office365 for SMTP but it seems like DISCOURSE_SMTP_AUTHENTICATION: login isn’t required … maybe try commenting that out and try again with STARTTLS set to True?

Okay the problem is now fixed. Huge mistake from my side : the email from Admin → settings → notification email was not the same from the smtp username.
Maybe a check should be made to prevent user to makes this mistake :face_with_raised_eyebrow:

but it seems like DISCOURSE_SMTP_AUTHENTICATION: login isn’t required

True, the final config

DISCOURSE_SMTP_ADDRESS: smtp.office365.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: test@example.fr
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: true

Discourse cannot guess what addresses the mail server will deliver for.

Sadly this solution is not working for me (I also tried to escape the password). I tried it with this SMTP setting problem with Office365 - #5 by ianwhite one which is working. But not everybody gets E-Mails… :thinking:

If some people get mail then it’s the fault of office365, or their mail provider. The others should check their spam folder, though if they use a service life office365 it will silently drop mail that it thinks is spam.

I tried it with these settings. In the skipped section in the email tab I can see the following error:

554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied;

Sounds like the address you are sending from is not one that the mail server supports. There is a line at the bottom of app.yml that week let you set the notification address. (you can set it in sure settings if you’re logged in)

Or maybe they have VERP enabled so the email address is replies+{key}@example.com instead of the authorized noreply@example.com That was the issue I’ve faced in past while trying to send mails from my own mail server. It’s usually easy to fix though.

Да. Это сработало у меня. Два момента при первоначальной настройке:

DISCOURSE_SMTP_USER_NAME:
-- И --
DISCOURSE_NOTIFICATION_EMAIL:

должны быть установлены в один и тот же адрес электронной почты.

Актуальные инструкции для тех, кто сталкивается с проблемами при настройке Office 365 и прямой доставки (direct-delivery)

  • Перейдите в центр администрирования Microsoft
  • Нажмите «Настройки», затем «Домены»
  • Нажмите «Добавить домен»
  • Следуйте инструкциям на экране, чтобы добавить URL вашего форума (пример: forum:yourlinks.com)
  • После выполнения указанных шагов и подтверждения DNS вы сможете создать почтовый ящик с использованием этого поддомена
  • Нажмите «Пользователи», затем «Активные пользователи»
  • Нажмите «Добавить пользователя»
  • Создайте почтовый ящик для вашего форума (пример: noreply@forum.yourlinks.com). Домен почтового ящика должен совпадать с хостнеймом, на котором работает форум
  • Нажмите «Лицензии и приложения»
  • Назначьте этому почтовому ящику лицензию Exchange Online (План 1) (лимит 10 000 сообщений в день, ограничение 30 сообщений в минуту). Для работы прямой доставки обязательно наличие лицензии, привязанной к почтовому ящику. На момент написания стоимость составляет 4,00 USD/мес или 5,10 CAD/мес. Если вам требуется более высокий лимит или менее строгое ограничение, доступны другие тарифные планы
  • Нажмите «Почта», затем «Управление почтовыми приложениями»
  • Включите «Проверенный SMTP»
  • Нажмите «Сохранить изменения»
  • Перейдите в портал Azure
  • Перейдите в вашу активную директорию
  • В левой боковой панели выберите «Свойства», непосредственно под разделом «Настройки пользователя»
  • Выберите «Управление параметрами безопасности по умолчанию»
  • Установите «Параметры безопасности по умолчанию» в значение «Отключено»
  • Нажмите «Сохранить»
  • Вернитесь в раздел «Пользователи» > «Активные пользователи»
  • Нажмите «Многофакторная аутентификация»
  • Отключите MFA для используемого почтового ящика

Почтовый ящик теперь готов к использованию вашим форумом на базе Discourse.

Установите параметры безопасности по умолчанию в «отключено»

Это было единственное, что мешало аутентификации SMTP…
Я бился головой об стену несколько дней…
Почему Microsoft делает всё так сложно…?

Отключение настроек безопасности по умолчанию может больше не потребоваться при принудительном включении MFA. Если вы включите и затем принудительно примените MFA для учетной записи M365, вы сможете перейти на страницу настройки MFA этой учетной записи и добавить пароль приложения для использования и обхода MFA. Мне удалось это настроить для пользователя с лицензией M365 Business Basic, у которого были включены принудительное MFA, SMTP AUTH и настройки безопасности по умолчанию. Мне нужно было лишь увеличить таймауты открытия и чтения SMTP, добавив две дополнительные строки. Значение 30 может быть избыточным, но 5 — слишком мало.

Рабочая запись в app.yml (по состоянию на сентябрь 2023 года):

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: user@domain.com
  DISCOURSE_SMTP_PASSWORD: whatever-your-app-password-is
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_NOTIFICATION_EMAIL: user@domain.com
  DISCOURSE_SMTP_OPEN_TIMEOUT: 30
  DISCOURSE_SMTP_READ_TIMEOUT: 30