Office 365 – SMTP server vrací autorizační chybu
- MikKuba
- Člen | 83
Ahoj,
Snažím se z aplikace posílat maily skrze klientův server Office 365,
avšak bezúspěšně.
V configu mám nastavené připojení
mail:
smtp: true # use SmtpMailer instead of SendmailMailer
host: 'smtp.office365.com'
port: 587
username: 'email@domena.cz'
password: 'heslo'
secure: 'tls' # possible values are ssl, tls or null
Přesto při snaze odeslat mail mi to vyhodí tuto chybu:
SMTP server did not accept password with error: 535
5.7.139 Authentication unsuccessful, the request did not meet the criteria to
be authenticated successfully.
Googlil jsem už všelico, ale nic co by mě z problému dostalo.
Podle všeho je v klientu 365 povoleno SMTP. Předtím to ještě házelo
chybu o chybném heslu, byť bylo správně. K tomu jsem našel náhodný tip,
že stačí SMTP zakázat a zase povolit, což „pomohlo“ a přivedlo mě ale
k chybě popsané tučně výše.
Nesetkal se prosím s tímto někdo?
Co vím tak Office 365 nějak loni měnil zabezpečení, přesně ale nevím
co, ale nejspíš to mělo vliv i na toto SMTP.
Budu rád za jakékoliv rady, pokud je ještě co opravovat na straně
aplikace a není to nastavením přímo na Office365.
Děkuji! :)
Editoval MikKuba (27. 6. 2023 11:41)
- m.brecher
- Generous Backer | 863
@MikKuba
Chyba na jakou Jsi narazil se na různých fórech opakuje často, v komentářích je opakovaně uváděno, že Microsoft ruší podporu Basic Authentication pro ověření hesla (SMTP ??), a mělo by se přejít na jiný způsob:
https://learn.microsoft.com/…hange-online
To je jeden z možných směrů, kudy pátrat.
Jiné komentáře radí, že podporu pro SMTP AUTH lze ještě aktivovat:
https://learn.microsoft.com/…p-submission#…
Editoval m.brecher (22. 6. 2023 21:04)
- MikKuba
- Člen | 83
m.brecher napsal(a):
@MikKuba
Chyba na jakou Jsi narazil se na různých fórech opakuje často, v komentářích je opakovaně uváděno, že Microsoft ruší podporu Basic Authentication pro ověření hesla (SMTP ??), a mělo by se přejít na jiný způsob:
https://learn.microsoft.com/…hange-online
To je jeden z možných směrů, kudy pátrat.
Jiné komentáře radí, že podporu pro SMTP AUTH lze ještě aktivovat:
Ten první článek jsem možná při rešerši viděl, ale dost možná mu
nevěnoval pozornost.
Je tedy jasné že budu muset nastavit tu novou autorizaci a používat OAuth.
Máš s novou implementací zkušenost prosím?
Co jsem teď tak prolítl i to nastavení v Microsoft Azure (které bude muset udělat klient, jehož je to emailový server) tak jsem tam viděl spíš jen nějaké nastavení Redirect URI pro autorizaci, avšak já ten server využívám k odesílání automatizovaných emailů, které spouští cron primárně. Nebude toto nějaký potenciálně problém?
Ale říkám si, že na toto se musí maily využívat drtivě, tedy nějaký proces který nijak neovládá z prohlížeče uživatel a tedy třeba připojení skrz nějaké popup okno apod nebude úplně funkční.
Děkuju!
- Pavel Kravčík
- Člen | 1194
Nastavení IMHO máš dobře, tohle používáme ve všech projektech. Funguje to na všechno (sdílené schránky, SPF na cizí domény), všechny problémy, které jsme řešili (errory při posílání) byly nastavením na straně MicroSoftu. Tj. při problémech jsme vlastně nemuseli šahat do kódu, ale vždy řešili nastavení infra (firewall) nebo nastavení přímo někde v o365. Máme na to externí firmu, tak moc neporadím, ale být Tebou zaměřím se spíš směrem, co jsem zmínil.
mail:
host: smtp.office365.com
port: 587
username: xxxx
password: xxxx
smtp: true
secure: tls
Z 2019 jsem našel mail, že někdo z ifra nastavil delší čas na HELLO
SMTP server did not accept HELO
, nastavili tam nějakou sekundu
navíc a začalo fungovat.
Editoval Pavel Kravčík (27. 6. 2023 11:39)
- MikKuba
- Člen | 83
Ozzrel napsal(a):
To potvrzuji nastavené to mám stejně. S OAuth2 jsem bojoval na začátku roku kdy MS zrušil Basic pro čtení. U SMTP to vynuceno není. Jen trvá na novějším TLS tak jsem musel updatovat sendmail pro Windows Server.
A funguje ti to i nyní a bude do budoucna, myslím čistě SMTP bez nějaké změny s tím OAuth? Updatoval sendmail myšleno jako ten balíček mailový, co poskytuje Nette a TLS zůstane, nebo tam bude i něco jako „starttls“?
- Ozzrel
- Generous Backer | 54
No funguje to SMTP přes sendmail. Je to Win Server tak to je prostě novější verze která má podporu TLS 1.2 Jestli začne MS vynucovat OAuth2 pro SMTP tak splním jejich další přání a to nepoužívat 365 pro robotické odesílání. Momentálně to funguje a ten basic potřebuju nejen já v PHP/Nette ale i Zabbix a tiskárny a další zařízení co někam něco hlásí. Pak prostě přejdu na SMTP od poskytovatele internetu nebo nějakou SMTP službu.
- MikKuba
- Člen | 83
Ozzrel napsal(a):
No funguje to SMTP přes sendmail. Je to Win Server tak to je prostě novější verze která má podporu TLS 1.2 Jestli začne MS vynucovat OAuth2 pro SMTP tak splním jejich další přání a to nepoužívat 365 pro robotické odesílání. Momentálně to funguje a ten basic potřebuju nejen já v PHP/Nette ale i Zabbix a tiskárny a další zařízení co někam něco hlásí. Pak prostě přejdu na SMTP od poskytovatele internetu nebo nějakou SMTP službu.
Omlouvám se za ještě jeden a nejspíš hloupý dotaz, ale je teda potřeba
v konfiguraci v Nette měnit?
Balíčky nejsou nijak extra staré, třeba nette/mail je
v3.1.10.
Nebo potřebuji od klienta nějaké jiné přístupy či změny přímo
v Microsoft 365, eventuálně vytvořit aplikaci v Azure AD, jak vlastně skrz
jeden proklik zmiňuje tento článek?
https://learn.microsoft.com/…hange-online
S mailovými servery mám prakticky nulovou zkušenost, vždy jsem si
vystačil buďto s funkcí mail()
anebo právě toto SMTP, kdy ale
nebyl po zadání údajů do configu problém.
Děkuju moc!
- Pavel Kravčík
- Člen | 1194
Nette bude pravděpodobně v pohodě. Problém bude buď na serveru, kde běží Nette (mělo by podporovat TLS 1.2 apod. viz výše) anebo to bude problém v o365. Tam by měl být možná nějaký dodatečný log (protože tohle za nás vyřešil ten správce o365 bez zásahu do Nette).
- MikKuba
- Člen | 83
Pavel Kravčík napsal(a):
Nette bude pravděpodobně v pohodě. Problém bude buď na serveru, kde běží Nette (mělo by podporovat TLS 1.2 apod. viz výše) anebo to bude problém v o365. Tam by měl být možná nějaký dodatečný log (protože tohle za nás vyřešil ten správce o365 bez zásahu do Nette).
Když si vyhodím phpinfo();
tak vidím tento řádek:
Registered Stream Socket Transports | tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Tedy hádám, že TLS1.2 na serveru je a při snaze spojení se využije? Protože v Tracy laděnce s chybou nedokážu najít, jaké TLS to používá. Zatím čekám na info, zda v o365 nenajdou nějaký log a případně jak to vyřešit.