SMTP com 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.

Sim. Isso funcionou para mim. Duas coisas na configuração inicial:

DISCOURSE_SMTP_USER_NAME:
-- E --
DISCOURSE_NOTIFICATION_EMAIL:

precisavam ser definidas com o mesmo e-mail.

Algumas instruções atualizadas para quem está com dificuldades no Office 365 e na entrega direta

  • Vá para o Centro de administração da Microsoft
  • Clique em Configurações e depois em Domínios
  • Clique em Adicionar domínio
  • Siga as instruções na tela para adicionar a URL do seu fórum (exemplo: forum:seuslinks.com)
  • Depois de concluir as etapas acima e o DNS for verificado, você poderá criar uma caixa de entrada usando esse subdomínio
  • Clique em Usuários e depois em Usuários ativos
  • Clique em Adicionar um usuário
  • Crie a caixa de correio para o seu fórum (exemplo: noreply@forum.seuslinks.com) o domínio da caixa de correio deve corresponder ao nome do host de onde o fórum é executado
  • Clique em Licenças e aplicativos
  • Atribua a esta caixa de correio uma licença do Exchange Online (Plano 1) (10.000 mensagens diárias com limite de 30 mensagens/min) É necessário ter uma licença anexada à caixa de correio para fins de entrega direta. No momento da escrita, o custo é de US$ 4,00/mês ou R$ 5,10/CAD | Caso necessite de um limite maior ou um limite de tempo menor, existem outros planos disponíveis
  • Clique em Email e depois em Gerenciar aplicativos de email
  • Habilite “SMTP autenticado”
  • Clique em Salvar alterações
  • Vá para o seu portal do Azure
  • Navegue até o seu active directory
  • Selecione Propriedades na barra lateral esquerda, logo abaixo de Configurações do usuário
  • Selecione Gerenciar padrões de segurança
  • Defina Padrões de segurança como “desabilitado”
  • Clique em Salvar
  • Volte para Usuários > Usuários ativos
  • Clique em Autenticação multifator
  • Desabilite a MFA na caixa de correio que está sendo usada

A caixa de correio agora está pronta para ser usada pelo seu Discourse.

Defina os padrões de segurança como “desabilitado”

Essa era a única coisa que impedia a autenticação SMTP…
Estou quebrando a cabeça há dias…
Por que a Microsoft torna as coisas tão difíceis…?

Desabilitar as configurações de segurança pode não ser mais necessário com a imposição do MFA. Se você habilitar e, em seguida, impor o MFA em uma conta M365, poderá acessar a página de configuração de MFA da conta e adicionar uma senha de aplicativo para usar e ignorar o MFA. Consegui fazer funcionar com um usuário licenciado M365 Business Basic com imposição de MFA, autenticação SMTP e configurações de segurança habilitadas. Eu só tive que aumentar os tempos limite de abertura e leitura SMTP com duas linhas adicionais. 30 pode ser excessivo, mas 5 foi muito pouco.

Entrada app.yml funcional, a partir de setembro de 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