Files
wevads-platform/scripts/graph_send.py
2026-02-26 04:53:11 +01:00

39 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""Send email via Microsoft Graph API. Usage: python3 graph_send.py <json_file>"""
import sys,json,urllib.request,urllib.parse,ssl,random
ctx=ssl.create_default_context()
TENANT="1aca01da-111e-4610-8b2d-5c46bb01dc09"
APP_ID="f57ec0b4-dee2-40a7-b557-bdcb725612d6"
APP_SECRET="GGi8Q~EQvN2tSIzX4q2GrvyOWqDgfuHajE62abz5"
SENDERS=["globaladmin@mbman.onmicrosoft.com","globaladmin2@mbman.onmicrosoft.com","adminoffice@mbman.onmicrosoft.com"]
with open(sys.argv[1]) as f:
d=json.load(f)
to=d["to"];subj=d["subject"];html=d["body"]
sender=random.choice(SENDERS)
# Get token
data=urllib.parse.urlencode({"grant_type":"client_credentials","client_id":APP_ID,"client_secret":APP_SECRET,"scope":"https://graph.microsoft.com/.default"}).encode()
req=urllib.request.Request(f"https://login.microsoftonline.com/{TENANT}/oauth2/v2.0/token",data)
try:
resp=json.loads(urllib.request.urlopen(req,timeout=10,context=ctx).read())
token=resp.get("access_token","")
if not token:print(f"FAIL:no_token");sys.exit(1)
except Exception as e:
print(f"FAIL:token:{e}");sys.exit(1)
# Send
payload=json.dumps({"message":{"subject":subj,"body":{"contentType":"HTML","content":html},"toRecipients":[{"emailAddress":{"address":to}}]},"saveToSentItems":False}).encode()
req2=urllib.request.Request(f"https://graph.microsoft.com/v1.0/users/{sender}/sendMail",payload,{"Authorization":f"Bearer {token}","Content-Type":"application/json"})
try:
urllib.request.urlopen(req2,timeout=10,context=ctx)
print(f"OK:{sender}")
except urllib.error.HTTPError as e:
body=e.read().decode()[:80]
print(f"FAIL:{e.code}:{body}");sys.exit(1)
except Exception as e:
print(f"FAIL:{e}");sys.exit(1)