Маркетинговые почтовые сервисы типа MailChimp, SendInBlue и кучи других давно решили эту бизнес-задачу своих клиентов.
Каждое письмо генерится с уникальными метками в ссылках. Все клики по ссылкам проходят через их систему счётчиков с последующим редиректом на целевую локацию.
upd. из любви к велоспорту можно, конечно, написать своё. Смысл тот же: каждое письмо создавать индивидуально, прописывая во все ссылки в этом письме параметр, идентифицирующий получателя. Например
<!-- было -->
Смотрите <a href="https://example.com/catalog">наш каталог</a>
<!-- стало -->
Смотрите <a href="https://example.com/catalog?uuid=09076506-5f26-11eb-9b96-005056111e65">наш каталог</a>
плюс добавить
стандартные utm-метки для общей статистики того же Яндекса. Они не позволяют идентифицировать конкретного пользователя.
Далее мяч на стороне сайта: собирать статистику внутри или бросать в Яндекс.Метрику. Для Метрики нужно будет написать небольшой JS, который при загрузке любой страницы вашего сайта будет смотреть, есть ли в адресе параметр
uuid
и при обнаружении кидать событие в Метрику. Например, можно назначать этот UUID как UserID Метрики методом
setUserId()