Implementierung E-Mail-Dokument-Automatisierung und technischer Check der Versand-Blocker. Workaround via SuperOffice-Aktivitäten etabliert.
88 lines
3.3 KiB
Python
88 lines
3.3 KiB
Python
import os
|
|
import json
|
|
import logging
|
|
from dotenv import load_dotenv
|
|
load_dotenv(override=True)
|
|
from superoffice_client import SuperOfficeClient
|
|
from config import settings
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger("diagnose-email")
|
|
|
|
def diagnose():
|
|
print("🔍 Starting Email Capability Diagnosis...")
|
|
client = SuperOfficeClient()
|
|
if not client.access_token:
|
|
print("❌ Auth failed.")
|
|
return
|
|
|
|
# 1. Check Licenses / Capabilities via Associate/Me
|
|
print("\n--- 1. User & License Check ---")
|
|
try:
|
|
me = client._get("Associate/Me")
|
|
if me:
|
|
print(f"User: {me.get('Name')} (ID: {me.get('AssociateId')})")
|
|
print(f"Type: {me.get('Type')}")
|
|
# Check for specific functional rights if available in the object
|
|
# (Note: API often hides raw license keys, but let's check what we get)
|
|
print("Function Rights (TableRight):", me.get("TableRight"))
|
|
else:
|
|
print("❌ Could not fetch current user.")
|
|
except Exception as e:
|
|
print(f"❌ User check failed: {e}")
|
|
|
|
# 2. Check User Preferences (Email Settings)
|
|
# Endpoint: GET /Preference/{section}/{key}
|
|
# We look for 'Mail' section preferences
|
|
print("\n--- 2. Email Preferences (System & User) ---")
|
|
pref_keys = [
|
|
("Mail", "EmailClient"),
|
|
("Mail", "EmailSystem"),
|
|
("System", "SoProtocol"),
|
|
("Visual", "UseWebTools")
|
|
]
|
|
|
|
for section, key in pref_keys:
|
|
try:
|
|
# Note: The API for preferences might be /Preference/<Section>/<Key>
|
|
# or require a search. Let's try direct access first.
|
|
res = client._get(f"Preference/{section}/{key}")
|
|
if res:
|
|
print(f"✅ Preference '{section}/{key}': {json.dumps(res, indent=2)}")
|
|
else:
|
|
print(f"❓ Preference '{section}/{key}' not found or empty.")
|
|
except Exception as e:
|
|
print(f"⚠️ Error checking preference '{section}/{key}': {e}")
|
|
|
|
# 3. Check for specific functional rights (Archive/List)
|
|
# If we can access 'ShipmentType' list, we might have Marketing
|
|
print("\n--- 3. Marketing Capability Check ---")
|
|
try:
|
|
shipment_types = client._get("List/ShipmentType/Items")
|
|
if shipment_types:
|
|
print(f"✅ Found {len(shipment_types)} Shipment Types (Marketing module likely active).")
|
|
for st in shipment_types:
|
|
print(f" - {st.get('Name')} (ID: {st.get('Id')})")
|
|
else:
|
|
print("❌ No Shipment Types found (Marketing module might be inactive/restricted).")
|
|
except Exception as e:
|
|
print(f"❌ Error checking Shipment Types: {e}")
|
|
|
|
# 4. Check Document Template for 'Email'
|
|
print("\n--- 4. Document Template Configuration ---")
|
|
try:
|
|
# We know ID 157 exists, let's inspect it closely
|
|
tmpl = client._get("DocumentTemplate/157")
|
|
if tmpl:
|
|
print(f"Template 157: {tmpl.get('Name')}")
|
|
print(f" - Generator: {tmpl.get('Generator')}") # Important!
|
|
print(f" - Filename: {tmpl.get('Filename')}")
|
|
print(f" - Direction: {tmpl.get('Direction')}")
|
|
else:
|
|
print("❌ Template 157 not found via ID.")
|
|
except Exception as e:
|
|
print(f"❌ Error checking Template 157: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
diagnose()
|