fix: use %20 encoding instead of + for Outlook deeplink body and add --only option
This commit is contained in:
parent
a1f8b4412e
commit
4bb57962dc
2 changed files with 31 additions and 11 deletions
|
|
@ -302,12 +302,12 @@ class Command(BaseCommand):
|
||||||
"source_user": source_user.username,
|
"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({
|
deeplink_params = urllib.parse.urlencode({
|
||||||
"to": email,
|
"to": email,
|
||||||
"subject": subject,
|
"subject": subject,
|
||||||
"body": body,
|
"body": body,
|
||||||
})
|
}, quote_via=urllib.parse.quote)
|
||||||
outlook_deeplink = f"https://outlook.cloud.microsoft/mail/deeplink/compose?{deeplink_params}"
|
outlook_deeplink = f"https://outlook.cloud.microsoft/mail/deeplink/compose?{deeplink_params}"
|
||||||
|
|
||||||
drafts_payload.append({
|
drafts_payload.append({
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,8 @@ def main():
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--delay",
|
"--delay",
|
||||||
type=float,
|
type=float,
|
||||||
default=2.5,
|
default=6.0,
|
||||||
help="Délai en secondes entre l'ouverture de chaque brouillon en mode automatique (défaut : 2.5s).",
|
help="Délai en secondes entre l'ouverture de chaque brouillon en mode automatique (défaut : 6.0s).",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--step",
|
"--step",
|
||||||
|
|
@ -103,6 +103,12 @@ def main():
|
||||||
default=False,
|
default=False,
|
||||||
help="Mode pas-à-pas : demande confirmation avant d'ouvrir chaque brouillon.",
|
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(
|
parser.add_argument(
|
||||||
"--dry-run",
|
"--dry-run",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
|
|
@ -136,6 +142,18 @@ def main():
|
||||||
print("Aucun brouillon trouvé dans la charge utile.")
|
print("Aucun brouillon trouvé dans la charge utile.")
|
||||||
return
|
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}...")
|
print(f"Chargement de {len(drafts)} brouillon(s) depuis {payload_file.name}...")
|
||||||
|
|
||||||
# Mode HTML
|
# Mode HTML
|
||||||
|
|
@ -189,17 +207,19 @@ def main():
|
||||||
for idx, item in enumerate(drafts, start=1):
|
for idx, item in enumerate(drafts, start=1):
|
||||||
to_email = item.get("to", "")
|
to_email = item.get("to", "")
|
||||||
subject = item.get("subject", "")
|
subject = item.get("subject", "")
|
||||||
deeplink = item.get("outlook_deeplink")
|
|
||||||
first_name = item.get("first_name", "")
|
first_name = item.get("first_name", "")
|
||||||
last_name = item.get("last_name", "")
|
last_name = item.get("last_name", "")
|
||||||
|
# Reconstruire le deep link pour garantir l'encodage %20 des espaces (supprime les '+' intempestifs)
|
||||||
if not deeplink:
|
body = item.get("body", "")
|
||||||
params = urllib.parse.urlencode({
|
params = urllib.parse.urlencode(
|
||||||
|
{
|
||||||
"to": to_email,
|
"to": to_email,
|
||||||
"subject": subject,
|
"subject": subject,
|
||||||
"body": item.get("body", ""),
|
"body": body,
|
||||||
})
|
},
|
||||||
deeplink = f"https://outlook.cloud.microsoft/mail/deeplink/compose?{params}"
|
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}>")
|
print(f"[{idx}/{len(drafts)}] {first_name} {last_name} <{to_email}>")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue