From 54ae9eef38df630ea513abcc80b7db2efb266454 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 10 Jun 2015 17:50:55 +0200 Subject: [PATCH] Return extension if needed. --- modoboa/lib/email_utils.py | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/modoboa/lib/email_utils.py b/modoboa/lib/email_utils.py index 1ed4b6377..4f9a19c39 100644 --- a/modoboa/lib/email_utils.py +++ b/modoboa/lib/email_utils.py @@ -218,23 +218,32 @@ class Email(object): return body -def split_mailbox(mailbox): - """Tries to split a mailbox in two parts (local part and domain name) +def split_mailbox(mailbox, return_extension=False): + """Try to split an address into parts (local part and domain name). + + If return_extension is True, we also look for an address extension + (something foo+bar). + + :return: a tuple (local part, domain<, extension>) - :return: a 2-uple (local part, domain) """ - try: - mailbox.index("@") - except ValueError: - return mailbox, None - parts = mailbox.split('@') - if len(parts) == 2: - address = parts[0] - domain = parts[1] + domain = None + if "@" not in mailbox: + localpart = mailbox else: - domain = parts[-1] - address = "@".join(parts[:-1]) - return (address, domain) + parts = mailbox.split("@") + if len(parts) == 2: + localpart = parts[0] + domain = parts[1] + else: + domain = parts[-1] + localpart = "@".join(parts[:-1]) + if not return_extension: + return (localpart, domain) + extension = None + if "+" in localpart: + localpart, extension = localpart.split("+", 1) + return (localpart, domain, extension) def decode(string, encodings=None, charset=None):