1. Все картинки в рассылку вставляем через cid:, и только одну, отображение или не отображение которой не повлияет на внешний вид рассылки — через ссылку на сайт. Вставляем примерно так:
example.com/example@example.com/N/image.gif
В этом адресе e-mail это адрес получателя, N — id рассылки. На сервере настроен рерайт на php скрипт, который считает адреса и отдает в ответ картинку. Использовать прозрачный gif не рекомендуется, gmail считает что так делают спамеры и меньше доверяет таким письмам — больше шансов попасть в спам.
Но нужно понимать, что не у всех включены картинки, поэтому подсчет все-равно не точный.
2. Ставим не прямые ссылки, а через скрипт-редиректер, типа
example.com/email.php?to=link&email=example@example.com&list=N
Ну или можно тоже какой нибудь ЧПУ сделать. И соответственно считает количество переходов на каждую ссылку и кто перешел.
Тут подсчет 100% точный, плюс при каждом переходе проверяем, попал ли e-mail в список прочитавших рассылку (пункт 1) и если не попал — добавляем. Ведь если человек перещел по ссылке значит он прочитал рассылку :)
3. Через
List-unsubscribe. Правда не всегда работает, но хоть что-то.