def METHOD_NAME(
    notification: BaseNotification,
    recipients: Iterable[RpcActor],
    shared_context: Mapping[str, Any],
    extra_context_by_actor: Mapping[RpcActor, Mapping[str, Any]] | None,
) -> None:
    for recipient in recipients:
        recipient_actor = RpcActor.from_object(recipient)
        with sentry_sdk.start_span(op="notification.send_email", description="one_recipient"):
            if recipient_actor.actor_type == ActorType.TEAM:
                # TODO(mgaeta): MessageBuilder only works with Users so filter out Teams for now.
                continue
            _log_message(notification, recipient_actor)
            with sentry_sdk.start_span(op="notification.send_email", description="build_message"):
                msg = MessageBuilder(
                    **get_builder_args(
                        notification, recipient_actor, shared_context, extra_context_by_actor
                    )
                )
            with sentry_sdk.start_span(op="notification.send_email", description="send_message"):
                # TODO: find better way of handling this
                add_users_kwargs = {}
                if isinstance(notification, ProjectNotification):
                    add_users_kwargs["project"] = notification.project
                msg.add_users([recipient.id], **add_users_kwargs)
                msg.send_async()
            notification.record_notification_sent(recipient_actor, ExternalProviders.EMAIL)