41
Почта в интернет-проекте: инфраструктура, статистика, мониторинг Лебедев Алексей

Алексей Лебедев (Wamba)

  • Upload
    ontico

  • View
    246

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Алексей Лебедев (Wamba)

Почта в интернет-проекте:

инфраструктура, статистика, мониторинг

Лебедев Алексей

Page 2: Алексей Лебедев (Wamba)

Почтовая инфраструктура

● IP адрес● Почтовый домен● Почтовый сервер● Программный код (отправка писем,

обработка жалоб и т. д.)● Статистика

Page 3: Алексей Лебедев (Wamba)

IP адрес

● Должен быть статическим● Лучше если у этого IP адреса не было

почтовой истории в течении последних 6 месяцев

● Идеально было бы иметь почтовый IP адрес из собственной автономной сети

Page 4: Алексей Лебедев (Wamba)

Почтовый домен — DNS записи● Тип «А» - по домену возвращает IP адрес. На этом

домене лучше не иметь веб-версии сайта.

● Тип «PTR» - по IP адресу получаем домен. PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP-сессии (HELO).

● SPF-запись (заполняется в TXT) - указывает список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене.

● Открытый ключ для ЭЦП (заполняется в TXT)

● abuse@, postmaster@ и whois-контакты — рабочие.

Page 5: Алексей Лебедев (Wamba)

DomainKeys Identified Mail (DKIM)

● Это метод E-mail аутентификации для антифишинга

● Открытый ключ добавляется в txt-поле DNS-записи.

● Добавляет в письмо цифровую подпись, связанную с именем домена отправителя письма

● Для создания ЭЦП использует извлеченный из хранилища закрытый ключ, созданный на основе информации о письме. Подпись вставляется в заголовок письма (DKIM-Signature).

● Проверка подлинности происходит при помощи открытого ключа.

Page 6: Алексей Лебедев (Wamba)

DomainKeys

● Система e-mail аутентификации, разработанная для проверки DNS домена отправителя e-mail сообщения и достоверности сообщения.

● Проект DomainKeys начала компания Yahoo

● DomainKeys выпущен в 2007 году со статусом «historical» - RFC 4870

● Подпись вставляется в заголовок письма (DomainKey-Signature).

Page 7: Алексей Лебедев (Wamba)

Почтовый сервер (MTA)

● Гибкая настройка почтовых логов.● Вменяемая производительность.● Наш почтовый сервер — Postfix.

Page 8: Алексей Лебедев (Wamba)

Почтовые логи

● Анализируем почтовые логи.● Добавляем результаты отправки каждого

письма в статистику.● При неуспешной отправке — делаем

различные действия в зависимости от причины неудачной отправки.

Page 9: Алексей Лебедев (Wamba)

Почтовые логи — sent (2.x.x)

● Письмо успешно отправлено:

Oct 16 11:47:04 relay postfix/smtp[1684]: 80E4EBFBB5134: to=<[email protected]>, relay=imx1.rambler.ru[81.19.66.235]:25, conn_use=7, delay=0.3, delays=0.13/0/0/0.17, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as A4F27516)

● Действия: отправляем результат успешной отправки в статистику.

Page 10: Алексей Лебедев (Wamba)

Почтовые логи — deferred (4.x.x)

● Сообщение временно не отправлено:Oct 16 10:42:52 relay postfix/smtp[16262]: 67D13BF75552F: to=<[email protected]>, relay=relay.nursat.net[195.82.0.9]:25, delay=159, delays=129/0/30/0, dsn=4.4.2, status=deferred (conversation with relay.nursat.net[195.82.0.9] timed out while receiving the initial server greeting)

● Добавляем данные статистику со статусом deferred

● Применяем временную блокировку данного адреса

Page 11: Алексей Лебедев (Wamba)

Почтовые логи — deferred (4.x.x)

● Случился «интересный» deferred:Oct 16 05:10:18 relay postfix/error[30520]: D5A21BE49DF97: to=<[email protected]>, relay=none, delay=0.12, delays=0.12/0/0/0, dsn=4.0.0, status=deferred (delivery temporarily suspended: host tommx.cdn.163.net[202.108.255.210] refused to talk to me: 421 /32 connection rate limit exceeded)

● Добавляем данные в статистику с особым статусом

● Применяем временную блокировку, мониторинг, ...

Page 12: Алексей Лебедев (Wamba)

Почтовые логи — bounced (5.x.x)

● Сообщение не отправлено (и отправлено не будет).

Oct 16 07:53:38 relay postfix/smtp[21592]: 4332BBEAC0166: to=<[email protected]>, relay=mxs.mail.ru[94.100.176.20]:25, delay=0.2, delays=0.12/0/0.01/0.07, dsn=5.0.0, status=bounced (host mxs.mail.ru[94.100.176.20] said: 550 Message was not accepted -- invalid mailbox. Local mailbox [email protected] is unavailable: user not found (in reply to end of DATA command)

● Добавляем данные статистику со статусом bounced

● Блокируем отправку писем

● Хранилище «битых» адресов

Page 13: Алексей Лебедев (Wamba)

Почтовые логи — bounced (5.x.x)● Случился «интересный» bounced:

Oct 16 10:03:22 relay postfix/smtp[15411]: 7FF91BF391708: to=<[email protected]>, relay=mta7.am0.yahoodns.net[98.138.112.38]:25, delay=2, delays=0.13/0/0.5/1.4, dsn=5.0.0, status=bounced (host mta7.am0.yahoodns.net[98.138.112.38] said: 554 Message not allowed - [PH01] Email not accepted for policy reasons. Please visit http://postmaster.yahoo.com/errors/postmaster-27.html [120] (in reply to end of DATA command))

● Добавляем данные в статистику с особым статусом

● Применяем временную блокировку, мониторинг, ...

Page 14: Алексей Лебедев (Wamba)

Программный код для отправки писем

● Письмо должно удовлетворять многим RFC: 2821, 2822, 532, 5322, …

● Не надо выдумывать велосипед● Для PHP: swiftmailer, zend-mail,...● Библиотеки сами заботятся о стандартах

Page 15: Алексей Лебедев (Wamba)

Зачем нужна почтовая статистика?

Page 16: Алексей Лебедев (Wamba)

Почтовая рассылка в среднестатистическом проекте

● подняли MTA● Генерация контента письма● mail($recipient, $subject, $body, $header);● ...● PROFIT!

Page 17: Алексей Лебедев (Wamba)

А что с почтовой статистикой?

● Ммм... ● У нас есть логи MTA!● grep '@#$%@' mail.log | wc -l● Получили статистику отправленных писем!

Page 18: Алексей Лебедев (Wamba)

Почтовая статистика из MTA

Page 19: Алексей Лебедев (Wamba)

Что не хватает?

● А что с просмотрами, кликами?● На какие домены шлем почту?● А если рассылаем разные типы писем?● А если письма на нескольких языках?● ...

Page 20: Алексей Лебедев (Wamba)

Есть готовые решения!

● postmaster.mail.ru● postmaster.yandex.ru● …● И они к тому же бесплатные!

Page 21: Алексей Лебедев (Wamba)

postmaster.yandex.ru

Page 22: Алексей Лебедев (Wamba)

Минусы готовых решений

● Не все почтовые сервисы предоставляют доступ к почтовой статистике

● postmaster.mail.ru, postmaster.yandex.ru, … - много разных интерфейсов, нет единой статистики

● Платные решения при большом объеме почтового трафика очень дорогие

Page 23: Алексей Лебедев (Wamba)

Делаем свою почтовую статистику

Page 24: Алексей Лебедев (Wamba)

Какие данные передавать в почтовую статистику

● Адрес получателя

● Тип письма

● Время отправки

● Время просмотра

● Время перехода из письма на сайт

● Язык

● Страна, пол, ...

● Статус отправки (MTA: sent, bounced, deferred)

Page 25: Алексей Лебедев (Wamba)

Как передавать данные в почтовую статистику

● Для каждого письма при отправке генерируем уникальный идентификатор, передаем ID и остальные данные в статистику

● В письмо встраиваем pixel:<img src="http://mamba.ru/1.jpg?id=288ade5a9f3fbc45b096dc695" alt=""/>

погрешность!

● В ссылках письма добавляем ID и обрабатываем в контроллерах

● Анализируем логи MTA — получаем статус отправки (sent, bounced, deferred)

Page 26: Алексей Лебедев (Wamba)

Как обрабатывать данные в почтовой статистике

● Письмо могут просмотреть не сразу● Храним данные о каждом письме 2 недели ● В хранилище сотни миллионов записей● Асинхронно!!!● RabbitMQ + MySQL● Шардинг● Хитрая агрегация данных

Page 27: Алексей Лебедев (Wamba)

Новый график статистики

Page 28: Алексей Лебедев (Wamba)

Как анализировать статистику?

● Фильтры:– Почтовый сервис (gmail, hotmail etc..)

– Тип письма

– Язык

– …

● С помощью фильтров делаем полезные графики

● С помощью фильтров локализуем проблему

Page 29: Алексей Лебедев (Wamba)

Статистика без фильтров — как бы все хорошо..

Page 30: Алексей Лебедев (Wamba)

Фильтр «письмо о новом сообщении/Español»- проблема генерации контента на испанском

Page 31: Алексей Лебедев (Wamba)

Фильтр «письмо о новом сообщении/AOL»- письма попали в спам

Page 32: Алексей Лебедев (Wamba)

MTA: Фильтр «письмо о новом сообщении»- проблема с плохими адресами

Page 33: Алексей Лебедев (Wamba)

Делаем Dashboards

Page 34: Алексей Лебедев (Wamba)

Жалобы пользователей

Page 35: Алексей Лебедев (Wamba)

Жалобы: Feedback Loop (FBL)

● Работает в yahoo, hotmail, mail.ru и т д.● Подключается в интерфейсе postmaster

почтового сервиса.● отсылается уведомление при нажатии на

кнопку «Это спам»● Пересылается оригинал письма, на которое

пожаловались● Обрабатываем жалобы (отписываем от

рассылок) и добавляем в статистику жалоб.

Page 36: Алексей Лебедев (Wamba)

Жалобы: List-Unsubscribe

● Работает в Gmail, yandex и т. д.● Встраиваем в письмо:

List-Unsubscribe: <mailto:[email protected]?subject=...>

● Отсылается уведомление при нажатии на кнопку «Это спам», «Отписаться от рассылки» и т. д.

● Оригинал письма не пересылается, данные для обработки жалобы передаем через

subject письма

Page 37: Алексей Лебедев (Wamba)

Фильтр «письмо о новом сообщении / Italiano»- некорректный перевод письма

Page 38: Алексей Лебедев (Wamba)

Анализ жалоб

● При всплеске жалоб необходимо выяснить причину жалоб

● Локализуем причину жалоб с помощью фильтров в статистике (язык, тип письма,..)

● Практика показывает что пользователи просто так жаловаться не будут — FBL как механизм поиска ошибок.

Page 39: Алексей Лебедев (Wamba)

Мониторинг почты

Page 40: Алексей Лебедев (Wamba)

Мониторинг почты

● Количество отосланных писем, просмотров писем, переходов из писем с применением различных фильтров

● Количество жалоб на письма с применением различных фильтров

● Количественных характеристики логов MTA● Пороги срабатывания мониторинга ставятся

индивидуально, в зависимости от многих параметров

Page 41: Алексей Лебедев (Wamba)

Спасибо за внимание

Лебедев Алексей, Team leaderhtp://corp.wamba.com/ru/[email protected]