diff --git a/modoboa/admin/forms/account.py b/modoboa/admin/forms/account.py index 51d246480..e406c147b 100644 --- a/modoboa/admin/forms/account.py +++ b/modoboa/admin/forms/account.py @@ -420,10 +420,12 @@ class AccountFormMail(forms.Form, DynamicForm): alias__address=alias).exists(): continue local_part, domname = split_mailbox(alias) - al = models.Alias(address=alias, enabled=account.is_active) - al.domain = models.Domain.objects.get(name=domname) - al.save() - al.set_recipients([self.mb.full_address]) + al, _ = models.Alias.objects.get_or_create( + address=alias, + domain=models.Domain.objects.get(name=domname), + defaults={'enabled': account.is_active}, + ) + al.add_recipients([self.mb.full_address]) al.post_create(user) def _update_sender_addresses(self): diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index e017b2110..808d0668d 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -137,8 +137,8 @@ class Alias(AdminObject): for admin in self.domain.admins: grant_access_to_object(admin, self) - def set_recipients(self, address_list): - """Set recipients for this alias. + def add_recipients(self, address_list): + """Add recipients for this alias. Special recipients: * local mailbox + extension: r_mailbox will be set to local mailbox @@ -187,6 +187,11 @@ class Alias(AdminObject): kwargs["r_mailbox"] = rcpt AliasRecipient(**kwargs).save() + def set_recipients(self, address_list): + """Set recipients for this alias.""" + + self.add_recipients(address_list) + # Remove old recipients self.aliasrecipient_set.exclude( address__in=address_list).delete() diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index 0c4bb27e7..963c9b7be 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -119,6 +119,22 @@ class AccountTestCase(ModoTestCase): account = User.objects.get(username=values["username"]) self.assertEqual(account.language, "fr") + def test_create_account_with_existing_alias(self): + alias = models.Alias.objects.get(address="alias@test.com") + alias.set_recipients(["user@external.com"]) + values = { + "email": "tester@test.com", + "username": "tester@test.com", + "role": "SimpleUsers", + "random_password": "on", + "quota_act": True, + "is_active": True, + "stepid": "step2", + "aliases": "alias@test.com", + } + self.ajax_post(reverse("admin:account_add"), values) + self.assertTrue(alias.aliasrecipient_set.count() == 2) + def test_aliases_update_on_disable(self): """Check if aliases are updated when account is disabled.""" account = User.objects.get(username="user@test.com")