Loaʻa me PHP i Exchange/Office 365

Ua hoʻolaha lōʻihi - i kēia manawa ʻoiaʻiʻo : Ua hoʻopau ʻo Microsoft i ka hōʻoia ʻana ma o ka ʻōlelo huna no kekahi mau protocols ma Exchange Online mai Kepakemapa 2022 ma ke ʻano oAuth2. ʻO nā pilikia GitHub o nā hale waihona puke a me nā kope kope e hōʻike maopopo i ka hoʻololi ʻana i hopu i nā luna he nui. Ma lalo mākou e hōʻike ai i ke ala e hiki ai iā ʻoe ke hoʻomau i ke komo ʻana i nā mea o kāu pahu leta Exchange me ke kōkua o oAuth2 ma PHP ma o IMAP.


Mai kahi ʻike palekana, pololei loa ka neʻe ʻana o Microsoft, akā ua piʻi iki ka paʻakikī o ka loaʻa ʻana o ka papahana i kāna mau leka uila. No ka laʻana, inā hoʻohana ʻoe i ka hale waihona puke barbushin/php-imap i hoʻohana nui ʻia, ʻo ke komo ʻana e like me kēia:

734a82898010e2fcb02c72c3cd9702c2

ʻAʻole hana hou. No ka hoʻokumu ʻana i kahi pilina ma oAuth2, ʻo ka paʻakikī mua ka loaʻa ʻana o ka hōʻailona komo. A no kēia, pono ʻoe e hana i ʻelua mau pilikia.

Azure Active Directory

Hoʻopaʻa inoa kēia mau hana i kahi app hou ma Azure Active Directory:

E komo i https://portal.azure.com
E wehe i ka "Azure Active Directory"
Koho i ka "Kakau inoa App" & "Kakau inoa hou".
E kope i ka "Application ID (Client)" (= Client ID) & "Directory ID (Tenant)" (= Tenant ID).
"ʻAe API" a "Hoʻohui i ka ʻae"
"Nā API i hoʻohana ʻia e kaʻu hui" & "Office 365 Exchange Online"
"ʻae noi" a me "IMAP.AccessAsApp"
Hāʻawi i ka ʻae admin
"Nā palapala hōʻoia a me nā mea huna" a me nā mea huna o nā mea kūʻai aku
E koho i ka wehewehe a hoʻonoho i ka pono
E kope i ka "Secret ID" (Client Secret) i ka papa kiʻi
Wehe i nā noi ʻoihana
E kope i ka "Object ID".

PowerShell

I kēia manawa hoʻohuli mākou i ka app i ka Microsoft PowerShell (Administrator mode) a hāʻawi i nā ʻae i nā pahu leta pākahi (<TENANTID>, <CLIENTID>, <OBJECTID>, <EMAIL> pono e hoʻololi i kēlā me kēia hihia):

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

Ke hana ʻoe i kēlā, ʻaʻole ʻo ka ʻepekema rocket ke koena. No ka mea ʻaʻole kākoʻo ʻo barbushin/php-imap i ka oAuth2, hiki iā ʻoe ke hoʻohui me ka waihona waihona ʻē aʻe Webklex/php-imap (ʻo ia hoʻi ka mea e pono ai ke koi ʻole i ka module PHP IMAP ).:

734a82898010e2fcb02c72c3cd9702c2

Eia naʻe, hiki ke hoʻohana ʻia nā hale waihona puke i kākoʻo ʻole i ka oAuth2 me kahi mea koho e like me simonrob/email-oauth2-proxy e hana pono. Ma hope o kēia Hoʻoiho a me ka hoʻokomo ʻana ma o python -m pip install -r requirements-no-gui.txt (Python ≥3.6 koi ʻia) hoʻoponopono ʻoe i ka faila emailproxy.config e like me kēia (e hoʻololi ana i kēia manawa <TENANTID>, <CLIENTID>, <CLIENTSECRET> a <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>

A laila hoʻomaka ʻoe i ka proxy me python emailproxy.py --no-gui a hiki i kēia manawa ke hele i ka IP unencrypted localhost ma ke awa 1993 hoʻohui ma o ka Basic Auth maʻamau (a me kekahi ʻōlelo huna). Inā makemake ʻoe e hoʻomaka i ka proxy ma ke ʻano he lawelawe ma hope ke hoʻomaka ʻoe i ka ʻōnaehana, hiki iā ʻoe ke hoʻohana, no ka laʻana 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

Inā makemake ʻia kahi pilina i hoʻopili ʻia, hiki nō hoʻi kēia - no kēia hana ʻoe i kahi kī pilikino a me kahi palapala hōʻoia ponoʻī.:

openssl genrsa -out key.pem 3072
openssl req -new -x509 -key key.pem -out cert.pem -days 360

A laila hana ʻia ka ʻōlelo ma ka emailproxy.config keia mau faila elua:

local_key_path = /path/to/key.pem
local_certificate_path = /path/to/cert.pem

Hoʻouna leka uila

ʻO kekahi mea e makemake ana e hoʻouna i nā leka uila ma o ka polokalamu ma o Microsoft Exchange Online ke kū nei i kahi loli nui: ua hoʻopau ʻo Microsoft i ka hōʻoia inoa inoa a me ka ʻōlelo huna maʻamau no SMTP ma Exchange Online. ʻO ka mea i hoʻokō ʻia me kekahi mau laina code no nā makahiki i kēia manawa e pono ai ke ala ʻē aʻe ma o OAuth2 - me ka hoʻopaʻa inoa ʻana i nā polokalamu ma Azure Active Directory, nā palapala hōʻoia, a me ka hoʻokele hōʻailona. Hiki iā mākou ke hoʻokō i ke ʻano like no ka hoʻouna ʻana i nā leka uila, me ka loaʻa ʻana iā lākou.

"ʻAe API" a "Hoʻohui i ka ʻae"
"Nā API i hoʻohana ʻia e kaʻu hui" & "Office 365 Exchange Online"
"Nā ʻae noi" a me "SMTP.SendAsApp"
Hāʻawi i ka ʻae admin

Ua like ke kumumanaʻo o ka hoʻouna ʻana o SMTP ma o Microsoft Exchange 365 me ke komo ʻana o IMAP: Mai ka hoʻopau ʻia ʻana o ka Basic Authentication, ʻaʻohe koho ʻē aʻe iā OAuth2. Ma hope o ka hoʻohui ʻana i ka ʻae "SMTP.SendAsApp" i ka hoʻopaʻa inoa ʻana o ka polokalamu Azure a me ka hāʻawi ʻana i ka ʻae a ka luna hoʻomalu, hiki ke hoʻouna ʻia, no ka laʻana, me... PHPMailer Ua hoʻokō ʻia kēia. Ma kahi o ka waiho wale ʻana i kahi inoa inoa a me ka ʻōlelo huna e like me ma mua, hoʻohana ka hōʻoia e kūʻē i ke kikowaena SMTP i kahi hōʻailona komo. smtp.office365.com:

734a82898010e2fcb02c72c3cd9702c2

ʻIke ʻia paha he mea paʻakikī ka hoʻoikaika hoʻonohonoho hou i ka wā mua, akā e uku ʻia ia i ka wā lōʻihi: ʻoi aku ka palekana o ka hōʻoia ʻana ma muli o OAuth2, ʻoiai ʻaʻole pono e mālama ʻia nā ʻōlelo huna plaintext i loko o nā faila hoʻonohonoho a i ʻole nā palapala - a hiki ke kaupalena ʻia ka hōʻailona komo i ka manawa a hoʻomalu ʻia kona mau ʻae me ka pololei granular. He mea kūpono hoʻi ke haʻi ʻia ma ʻaneʻi ka waihona puke mailhelper , kahi e hāʻawi ana i kahi API kūpono no ka loaʻa ʻana a me ka hoʻouna ʻana i nā leka uila.

Hope