এক্সচেঞ্জ/অফিস 365-এ PHP দিয়ে অ্যাক্সেস করুন

দীর্ঘ ঘোষণা করা হয়েছে - এখন বাস্তবতা : Microsoft 2022 সালের সেপ্টেম্বর থেকে oAuth2 এর পক্ষে এক্সচেঞ্জ অনলাইনে নির্দিষ্ট প্রোটোকলের জন্য পাসওয়ার্ড দ্বারা প্রমাণীকরণ বন্ধ করে দিয়েছে। অনেক লাইব্রেরি এবং ব্যাকআপ স্ক্রিপ্টগুলির গিটহাব সমস্যাগুলি এটি স্পষ্ট করে যে পরিবর্তনটি অনেক প্রশাসককে অবাক করে দিয়েছিল। নীচে আমরা একটি উপায় দেখাই কিভাবে আপনি IMAP এর মাধ্যমে PHP এর মাধ্যমে oAuth2 এর সাহায্যে আপনার এক্সচেঞ্জ মেলবক্সের বিষয়বস্তু অ্যাক্সেস করা চালিয়ে যেতে পারেন।


নিরাপত্তার দৃষ্টিকোণ থেকে, মাইক্রোসফ্টের পদক্ষেপটি খুবই সঠিক, তবে এর ই-মেইলগুলিতে প্রোগ্রাম্যাটিক অ্যাক্সেসের জটিলতা বেশ কিছুটা বেড়েছে। উদাহরণস্বরূপ, আপনি যদি বহুল ব্যবহৃত বারবুশিন/php-imap লাইব্রেরি ব্যবহার করেন, তাহলে অ্যাক্সেস নিম্নরূপ হবে:

734a82898010e2fcb02c72c3cd9702c2

এটা শুধু আর কাজ করে না. oAuth2 এর মাধ্যমে একটি সংযোগ স্থাপন করার জন্য, প্রথম অসুবিধা হল অ্যাক্সেস টোকেন পেতে৷ এবং এর জন্য আপনাকে দুটি প্রতিবন্ধকতা নিতে হবে।

Azure সক্রিয় ডিরেক্টরি

নিম্নলিখিত পদক্ষেপগুলি Azure অ্যাক্টিভ ডিরেক্টরিতে একটি নতুন অ্যাপ নিবন্ধন করুন৷:

https://portal.azure.com এ লগইন করুন
"Azure সক্রিয় ডিরেক্টরি" খুলুন
"অ্যাপ নিবন্ধন" এবং "নতুন নিবন্ধন" নির্বাচন করুন।
"অ্যাপ্লিকেশন আইডি (ক্লায়েন্ট)" (=ক্লায়েন্ট আইডি) এবং "ডিরেক্টরি আইডি (টেন্যান্ট)" (=টেন্যান্ট আইডি) কপি করুন।
"এপিআই অনুমতি" এবং "অনুমতি যোগ করুন"
"আমার সংস্থার দ্বারা ব্যবহৃত APIs" এবং "Office 365 Exchange Online"
"আবেদন অনুমতি" এবং "IMAP.AccessAsApp"
অ্যাডমিনের সম্মতি দিন
"সার্টিফিকেট ও সিক্রেটস" এবং "ক্লায়েন্ট সিক্রেটস" এবং "নতুন ক্লায়েন্ট সিক্রেট"
বর্ণনা নির্বাচন করুন এবং বৈধতা সেট করুন
ক্লিপবোর্ডে "সিক্রেট আইডি" (ক্লায়েন্ট সিক্রেট) কপি করুন
এন্টারপ্রাইজ অ্যাপ্লিকেশন খুলুন
"অবজেক্ট আইডি" অনুলিপি করুন।

শক্তির উৎস

এখন আমরা অ্যাপটি চালু করি মাইক্রোসফট পাওয়ারশেল (প্রশাসক মোড) এবং পৃথক মেইলবক্সে অনুমতি বরাদ্দ করুন (<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 এবং এখন আইপি আনএনক্রিপ্ট করা যেতে পারে localhost বন্দরে 1993 নিয়মিত মৌলিক প্রমাণীকরণ (এবং যেকোনো পাসওয়ার্ড সেট) এর মাধ্যমে সংযোগ করুন। আপনি সিস্টেম চালু করার সময় ব্যাকগ্রাউন্ডে একটি পরিষেবা হিসাবে প্রক্সি চালু করতে চাইলে, আপনি ব্যবহার করতে পারেন, উদাহরণস্বরূপ সিস্টেমড:

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
পেছনে