fix: use %20 encoding instead of + for Outlook deeplink body and add --only option

This commit is contained in:
kdeterme 2026-09-04 09:41:04 +02:00
parent a1f8b4412e
commit 4bb57962dc
2 changed files with 31 additions and 11 deletions

View file

@ -302,12 +302,12 @@ class Command(BaseCommand):
"source_user": source_user.username,
})
# URL Outlook Web Deep Link pour composer directement
# URL Outlook Web Deep Link pour composer directement (%20 au lieu de + pour les espaces)
deeplink_params = urllib.parse.urlencode({
"to": email,
"subject": subject,
"body": body,
})
}, quote_via=urllib.parse.quote)
outlook_deeplink = f"https://outlook.cloud.microsoft/mail/deeplink/compose?{deeplink_params}"
drafts_payload.append({

View file

@ -94,8 +94,8 @@ def main():
parser.add_argument(
"--delay",
type=float,
default=2.5,
help="Délai en secondes entre l'ouverture de chaque brouillon en mode automatique (défaut : 2.5s).",
default=6.0,
help="Délai en secondes entre l'ouverture de chaque brouillon en mode automatique (défaut : 6.0s).",
)
parser.add_argument(
"--step",
@ -103,6 +103,12 @@ def main():
default=False,
help="Mode pas-à-pas : demande confirmation avant d'ouvrir chaque brouillon.",
)
parser.add_argument(
"--only",
type=str,
default=None,
help="Filtre pour n'ouvrir que les brouillons correspondant à ce texte (nom, email ou login).",
)
parser.add_argument(
"--dry-run",
action="store_true",
@ -136,6 +142,18 @@ def main():
print("Aucun brouillon trouvé dans la charge utile.")
return
if args.only:
pattern = args.only.lower()
drafts = [
d
for d in drafts
if pattern in d.get("to", "").lower()
or pattern in d.get("first_name", "").lower()
or pattern in d.get("last_name", "").lower()
or pattern in d.get("username", "").lower()
]
print(f"Filtre '{args.only}' appliqué : {len(drafts)} brouillon(s) sélectionné(s).")
print(f"Chargement de {len(drafts)} brouillon(s) depuis {payload_file.name}...")
# Mode HTML
@ -189,17 +207,19 @@ def main():
for idx, item in enumerate(drafts, start=1):
to_email = item.get("to", "")
subject = item.get("subject", "")
deeplink = item.get("outlook_deeplink")
first_name = item.get("first_name", "")
last_name = item.get("last_name", "")
if not deeplink:
params = urllib.parse.urlencode({
# Reconstruire le deep link pour garantir l'encodage %20 des espaces (supprime les '+' intempestifs)
body = item.get("body", "")
params = urllib.parse.urlencode(
{
"to": to_email,
"subject": subject,
"body": item.get("body", ""),
})
deeplink = f"https://outlook.cloud.microsoft/mail/deeplink/compose?{params}"
"body": body,
},
quote_via=urllib.parse.quote,
)
deeplink = f"https://outlook.cloud.microsoft/mail/deeplink/compose?{params}"
print(f"[{idx}/{len(drafts)}] {first_name} {last_name} <{to_email}>")