Көптөн бери жарыяланган - азыр чындык : Microsoft 2022-жылдын сентябрынан тартып oAuth2 пайдасына Exchange Online'дагы айрым протоколдор үчүн сырсөз менен аутентификацияны өчүрдү. Көптөгөн китепканалардын жана резервдик скрипттердин GitHub маселелери, өзгөртүү көптөгөн администраторлорду таң калтырганын ачык көрсөтүп турат. Төмөндө биз IMAP аркылуу PHP аркылуу oAuth2 жардамы менен Exchange почта ящигиңиздин мазмунуна кантип жетүүнү улантсаңыз болорун көрсөтөбүз.
Коопсуздук көз карашынан алганда, Microsoftтун кадамы абдан туура, бирок анын электрондук почталарына программалык кирүүнүн татаалдыгы бир аз көбөйдү. Мисалы, эгер сиз кеңири колдонулган barbushin/php-imap китепканасын колдонсоңуз , кирүү төмөнкүдөй болгон.:
734a82898010e2fcb02c72c3cd9702c2
Бул жөн эле иштебейт. oAuth2 аркылуу байланыш түзүү үчүн, биринчи кыйынчылык - жетүү белгисин алуу. Ал эми бул үчүн сиз эки тоскоолдуктан өтүшүңүз керек.
Azure Active Directory
Төмөнкү кадамдар Azure Active Directoryде жаңы колдонмону каттайт:













PowerShell
Эми биз колдонмону бурабыз Microsoft PowerShell (Администратор режими) жана жеке почта ящиктерине уруксаттарды дайындыңыз (<TENANTID>
, <CLIENTID>
, <OBJECTID>
, <EMAIL>
ар бир учурда алмаштыруу керек):
Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -Organization <TENANTID>
New-ServicePrincipal -AppId <CLIENTID> -ServiceId <OBJECTID>
Add-MailboxPermission -Identity "<EMAIL>" -User <OBJECTID> -AccessRights FullAccess
...
Муну жасагандан кийин, калганы ракета илими эмес. barbushin/php-imap oAuth2ди колдобогондуктан, сиз Webklex/php-imap альтернатива китепканасы менен туташа аласыз (анын PHP IMAP модулун талап кылбаган артыкчылыгы да бар).:
734a82898010e2fcb02c72c3cd9702c2
Бирок, расмий түрдө oAuth2 колдоого албаган китепканалар сыяктуу прокси менен да колдонулушу мүмкүн simonrob/email-oauth2-прокси аны ишке жарамдуу кылуу. Ушундан кийин Жүктөп алуу жана орнотуу аркылуу python -m pip install -r requirements-no-gui.txt
(Python ≥3.6 талап кылынат) сиз файлды түзөтөсүз emailproxy.config
мисалы, төмөнкүдөй (бул убакыттын ордуна <TENANTID>
, <CLIENTID>
, <CLIENTSECRET>
жана <EMAIL>
):
[Server setup]
[IMAP-1993]
local_address = localhost
server_address = outlook.office365.com
server_port = 993
[Account setup]
[<EMAIL>]
token_url = https://login.microsoftonline.com/<TENANTID>/oauth2/v2.0/token
oauth2_scope = https://outlook.office365.com/.default
redirect_uri = http://localhost:8080
client_id = <CLIENTID>
client_secret = <CLIENTSECRET>
Андан кийин прокси менен баштайсыз python emailproxy.py --no-gui
жана азыр шифрленбеген IPге бара аласыз localhost
портунда 1993
кадимки Basic Auth аркылуу туташуу (жана кандайдыр бир сырсөз коюлган). Эгер сиз тутумду иштеткениңизде проксиди фондо кызмат катары баштоону кааласаңыз, мисалы, колдоно аласыз systemd:
sudo systemctl edit --force --full emailproxy.service
[Unit]
Description=Email OAuth 2.0 Proxy
[Service]
ExecStart=/usr/bin/python /path/to/emailproxy.py --no-gui
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable emailproxy.service --now
sudo systemctl status emailproxy.service
sudo systemctl start emailproxy.service
Эгер шифрленген туташуу керек болсо, бул да мүмкүн - бул үчүн сиз адегенде жеке ачкычты жана өз алдынча кол коюлган сертификатты түзөсүз.:
openssl genrsa -out key.pem 3072
openssl req -new -x509 -key key.pem -out cert.pem -days 360
Андан кийин шилтеме жасалат emailproxy.config
бул эки файл:
local_key_path = /path/to/key.pem
local_certificate_path = /path/to/cert.pem