diff --git a/swh/web/auth/mailmap.py b/swh/web/auth/mailmap.py
index 28e5cd08..d601a8ff 100644
--- a/swh/web/auth/mailmap.py
+++ b/swh/web/auth/mailmap.py
@@ -1,116 +1,119 @@
 # Copyright (C) 2022  The Software Heritage developers
 # See the AUTHORS file at the top-level directory of this distribution
 # License: GNU Affero General Public License version 3, or any later version
 # See top-level LICENSE file for more information
 
 import json
 
 from django.conf.urls import url
 from django.db import IntegrityError
 from django.db.models import Q
 from django.http.response import (
     HttpResponse,
     HttpResponseBadRequest,
     HttpResponseForbidden,
     HttpResponseNotFound,
 )
 from rest_framework import serializers
 from rest_framework.decorators import api_view
 from rest_framework.request import Request
 from rest_framework.response import Response
 
 from swh.web.auth.models import UserMailmap, UserMailmapEvent
 from swh.web.auth.utils import MAILMAP_PERMISSION
 
 
 class UserMailmapSerializer(serializers.ModelSerializer):
     class Meta:
         model = UserMailmap
         fields = "__all__"
 
 
 @api_view(["GET"])
 def profile_list_mailmap(request: Request) -> HttpResponse:
     if not request.user.has_perm(MAILMAP_PERMISSION):
         return HttpResponseForbidden()
 
     mms = UserMailmap.objects.filter(user_id=str(request.user.id),).all()
     return Response(UserMailmapSerializer(mms, many=True).data)
 
 
 @api_view(["POST"])
 def profile_add_mailmap(request: Request) -> HttpResponse:
     if not request.user.has_perm(MAILMAP_PERMISSION):
         return HttpResponseForbidden()
 
     event = UserMailmapEvent.objects.create(
         user_id=str(request.user.id),
         request_type="add",
         request=json.dumps(request.data),
     )
 
     from_email = request.data.pop("from_email", None)
     if not from_email:
         return HttpResponseBadRequest("'from_email' must be provided and non-empty.")
 
     try:
         UserMailmap.objects.create(
             user_id=str(request.user.id), from_email=from_email, **request.data
         )
-    except IntegrityError:
-        return HttpResponseBadRequest("This 'from_email' already exists.")
+    except IntegrityError as e:
+        if "user_mailmap_from_email_key" in e.args[0]:
+            return HttpResponseBadRequest("This 'from_email' already exists.")
+        else:
+            raise
 
     event.successful = True
     event.save()
 
     mm = UserMailmap.objects.get(user_id=str(request.user.id), from_email=from_email)
     return Response(UserMailmapSerializer(mm).data)
 
 
 @api_view(["POST"])
 def profile_update_mailmap(request: Request) -> HttpResponse:
     if not request.user.has_perm(MAILMAP_PERMISSION):
         return HttpResponseForbidden()
 
     event = UserMailmapEvent.objects.create(
         user_id=str(request.user.id),
         request_type="update",
         request=json.dumps(request.data),
     )
 
     from_email = request.data.pop("from_email", None)
     if not from_email:
         return HttpResponseBadRequest("'from_email' must be provided and non-empty.")
 
     user_id = str(request.user.id)
 
     try:
         to_update = (
             UserMailmap.objects.filter(Q(user_id__isnull=True) | Q(user_id=user_id))
             .filter(from_email=from_email)
             .get()
         )
     except UserMailmap.DoesNotExist:
         return HttpResponseNotFound()
 
     for attr, value in request.data.items():
         setattr(to_update, attr, value)
 
     to_update.save()
 
     event.successful = True
     event.save()
 
     mm = UserMailmap.objects.get(user_id=user_id, from_email=from_email)
     return Response(UserMailmapSerializer(mm).data)
 
 
 urlpatterns = [
     url(r"^profile/mailmap/list$", profile_list_mailmap, name="profile-mailmap-list",),
     url(r"^profile/mailmap/add$", profile_add_mailmap, name="profile-mailmap-add",),
     url(
         r"^profile/mailmap/update$",
         profile_update_mailmap,
         name="profile-mailmap-update",
     ),
 ]