Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Почта в интернет-проекте:
инфраструктура, статистика, мониторинг
Лебедев Алексей
Почтовая инфраструктура
● IP адрес
● Почтовый домен
● Почтовый сервер
● Программный код (отправка писем,
обработка жалоб и...
IP адрес
● Должен быть статическим
● Лучше если у этого IP адреса не было
почтовой истории в течении последних 6
месяцев
●...
Почтовый домен — DNS записи
● Тип «А» - по домену возвращает IP адрес. На этом
домене лучше не иметь веб-версии сайта.
● Т...
DomainKeys Identified Mail (DKIM)
● Это метод E-mail аутентификации для
антифишинга
● Открытый ключ добавляется в txt-поле...
DomainKeys
● Система e-mail аутентификации, разработанная
для проверки DNS домена отправителя e-mail
сообщения и достоверн...
Почтовый сервер (MTA)
● Гибкая настройка почтовых логов.
● Вменяемая производительность.
● Наш почтовый сервер — Postfix.
Почтовые логи
● Анализируем почтовые логи.
● Добавляем результаты отправки каждого
письма в статистику.
● При неуспешной о...
Почтовые логи — sent (2.x.x)
● Письмо успешно отправлено:
Oct 16 11:47:04 relay postfix/smtp[1684]: 80E4EBFBB5134:
to=<xxx...
Почтовые логи — deferred (4.x.x)
● Сообщение временно не отправлено:
Oct 16 10:42:52 relay postfix/smtp[16262]: 67D13BF755...
Почтовые логи — deferred (4.x.x)
● Случился «интересный» deferred:
Oct 16 05:10:18 relay postfix/error[30520]: D5A21BE49DF...
Почтовые логи — bounced (5.x.x)
● Сообщение не отправлено (и отправлено не
будет).
Oct 16 07:53:38 relay postfix/smtp[2159...
Почтовые логи — bounced (5.x.x)
● Случился «интересный» bounced:
Oct 16 10:03:22 relay postfix/smtp[15411]: 7FF91BF391708:...
Программный код для отправки
писем
● Письмо должно удовлетворять многим RFC:
2821, 2822, 532, 5322, …
● Не надо выдумывать...
Зачем нужна почтовая
статистика?
Почтовая рассылка в
среднестатистическом проекте
● подняли MTA
● Генерация контента письма
● mail($recipient, $subject, $b...
А что с почтовой статистикой?
● Ммм...
● У нас есть логи MTA!
● grep '@#$%@' mail.log | wc -l
● Получили статистику отправ...
Почтовая статистика из MTA
Что не хватает?
● А что с просмотрами, кликами?
● На какие домены шлем почту?
● А если рассылаем разные типы писем?
● А ес...
Есть готовые решения!
● postmaster.mail.ru
● postmaster.yandex.ru
● …
● И они к тому же бесплатные!
postmaster.yandex.ru
Минусы готовых решений
● Не все почтовые сервисы предоставляют
доступ к почтовой статистике
● postmaster.mail.ru, postmast...
Делаем свою почтовую статистику
Какие данные передавать в
почтовую статистику
● Адрес получателя
● Тип письма
● Время отправки
● Время просмотра
● Время п...
Как передавать данные в
почтовую статистику
● Для каждого письма при отправке генерируем
уникальный идентификатор, передае...
Как обрабатывать данные в
почтовой статистике
● Письмо могут просмотреть не сразу
● Храним данные о каждом письме 2 недели...
Новый график статистики
Как анализировать статистику?
● Фильтры:
– Почтовый сервис (gmail, hotmail etc..)
– Тип письма
– Язык
– …
● С помощью филь...
Статистика без фильтров — как бы все хорошо..
Фильтр «письмо о новом сообщении/Español»
- проблема генерации контента на испанском
Фильтр «письмо о новом сообщении/AOL»
- письма попали в спам
MTA: Фильтр «письмо о новом сообщении»
- проблема с плохими адресами
Делаем Dashboards
Жалобы пользователей
Жалобы: Feedback Loop (FBL)
● Работает в yahoo, hotmail, mail.ru и т д.
● Подключается в интерфейсе postmaster
почтового с...
Жалобы: List-Unsubscribe
● Работает в Gmail, yandex и т. д.
● Встраиваем в письмо:
List-Unsubscribe: <mailto:unsubscribe@m...
Фильтр «письмо о новом сообщении / Italiano»
- некорректный перевод письма
Анализ жалоб
● При всплеске жалоб необходимо выяснить
причину жалоб
● Локализуем причину жалоб с помощью
фильтров в статис...
Мониторинг почты
Мониторинг почты
● Количество отосланных писем, просмотров
писем, переходов из писем с применением
различных фильтров
● Ко...
Спасибо за внимание
Лебедев Алексей, Team leader
htp://corp.wamba.com/ru/
a.lebedev@wamba.com
Upcoming SlideShare
Loading in …5
×

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

658 views

Published on

Published in: Internet
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Почта в интернет-проекте: инфраструктура, статистика, мониторинг Лебедев Алексей
  2. 2. Почтовая инфраструктура ● IP адрес ● Почтовый домен ● Почтовый сервер ● Программный код (отправка писем, обработка жалоб и т. д.) ● Статистика
  3. 3. IP адрес ● Должен быть статическим ● Лучше если у этого IP адреса не было почтовой истории в течении последних 6 месяцев ● Идеально было бы иметь почтовый IP адрес из собственной автономной сети
  4. 4. Почтовый домен — DNS записи ● Тип «А» - по домену возвращает IP адрес. На этом домене лучше не иметь веб-версии сайта. ● Тип «PTR» - по IP адресу получаем домен. PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP-сессии (HELO). ● SPF-запись (заполняется в TXT) - указывает список серверов, имеющих право отправлять email- сообщения с обратными адресами в этом домене. ● Открытый ключ для ЭЦП (заполняется в TXT) ● abuse@, postmaster@ и whois-контакты — рабочие.
  5. 5. DomainKeys Identified Mail (DKIM) ● Это метод E-mail аутентификации для антифишинга ● Открытый ключ добавляется в txt-поле DNS-записи. ● Добавляет в письмо цифровую подпись, связанную с именем домена отправителя письма ● Для создания ЭЦП использует извлеченный из хранилища закрытый ключ, созданный на основе информации о письме. Подпись вставляется в заголовок письма (DKIM-Signature). ● Проверка подлинности происходит при помощи открытого ключа.
  6. 6. DomainKeys ● Система e-mail аутентификации, разработанная для проверки DNS домена отправителя e-mail сообщения и достоверности сообщения. ● Проект DomainKeys начала компания Yahoo ● DomainKeys выпущен в 2007 году со статусом «historical» - RFC 4870 ● Подпись вставляется в заголовок письма (DomainKey-Signature).
  7. 7. Почтовый сервер (MTA) ● Гибкая настройка почтовых логов. ● Вменяемая производительность. ● Наш почтовый сервер — Postfix.
  8. 8. Почтовые логи ● Анализируем почтовые логи. ● Добавляем результаты отправки каждого письма в статистику. ● При неуспешной отправке — делаем различные действия в зависимости от причины неудачной отправки.
  9. 9. Почтовые логи — sent (2.x.x) ● Письмо успешно отправлено: Oct 16 11:47:04 relay postfix/smtp[1684]: 80E4EBFBB5134: to=<xxx@rambler.ru>, 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) ● Действия: отправляем результат успешной отправки в статистику.
  10. 10. Почтовые логи — deferred (4.x.x) ● Сообщение временно не отправлено: Oct 16 10:42:52 relay postfix/smtp[16262]: 67D13BF75552F: to=<xxx@topmail.kz>, 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 ● Применяем временную блокировку данного адреса
  11. 11. Почтовые логи — deferred (4.x.x) ● Случился «интересный» deferred: Oct 16 05:10:18 relay postfix/error[30520]: D5A21BE49DF97: to=<xxx@tom.com>, 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) ● Добавляем данные в статистику с особым статусом ● Применяем временную блокировку, мониторинг, ...
  12. 12. Почтовые логи — bounced (5.x.x) ● Сообщение не отправлено (и отправлено не будет). Oct 16 07:53:38 relay postfix/smtp[21592]: 4332BBEAC0166: to=<xxx@mail.ru>, 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 xxx@mail.ru is unavailable: user not found (in reply to end of DATA command) ● Добавляем данные статистику со статусом bounced ● Блокируем отправку писем ● Хранилище «битых» адресов
  13. 13. Почтовые логи — bounced (5.x.x) ● Случился «интересный» bounced: Oct 16 10:03:22 relay postfix/smtp[15411]: 7FF91BF391708: to=<xxx@yahoo.com>, 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)) ● Добавляем данные в статистику с особым статусом ● Применяем временную блокировку, мониторинг, ...
  14. 14. Программный код для отправки писем ● Письмо должно удовлетворять многим RFC: 2821, 2822, 532, 5322, … ● Не надо выдумывать велосипед ● Для PHP: swiftmailer, zend-mail,... ● Библиотеки сами заботятся о стандартах
  15. 15. Зачем нужна почтовая статистика?
  16. 16. Почтовая рассылка в среднестатистическом проекте ● подняли MTA ● Генерация контента письма ● mail($recipient, $subject, $body, $header); ● ... ● PROFIT!
  17. 17. А что с почтовой статистикой? ● Ммм... ● У нас есть логи MTA! ● grep '@#$%@' mail.log | wc -l ● Получили статистику отправленных писем!
  18. 18. Почтовая статистика из MTA
  19. 19. Что не хватает? ● А что с просмотрами, кликами? ● На какие домены шлем почту? ● А если рассылаем разные типы писем? ● А если письма на нескольких языках? ● ...
  20. 20. Есть готовые решения! ● postmaster.mail.ru ● postmaster.yandex.ru ● … ● И они к тому же бесплатные!
  21. 21. postmaster.yandex.ru
  22. 22. Минусы готовых решений ● Не все почтовые сервисы предоставляют доступ к почтовой статистике ● postmaster.mail.ru, postmaster.yandex.ru, … - много разных интерфейсов, нет единой статистики ● Платные решения при большом объеме почтового трафика очень дорогие
  23. 23. Делаем свою почтовую статистику
  24. 24. Какие данные передавать в почтовую статистику ● Адрес получателя ● Тип письма ● Время отправки ● Время просмотра ● Время перехода из письма на сайт ● Язык ● Страна, пол, ... ● Статус отправки (MTA: sent, bounced, deferred)
  25. 25. Как передавать данные в почтовую статистику ● Для каждого письма при отправке генерируем уникальный идентификатор, передаем ID и остальные данные в статистику ● В письмо встраиваем pixel: <img src="http://mamba.ru/1.jpg?id=288ade5a9f3fbc45b096dc695" alt=""/> погрешность! ● В ссылках письма добавляем ID и обрабатываем в контроллерах ● Анализируем логи MTA — получаем статус отправки (sent, bounced, deferred)
  26. 26. Как обрабатывать данные в почтовой статистике ● Письмо могут просмотреть не сразу ● Храним данные о каждом письме 2 недели ● В хранилище сотни миллионов записей ● Асинхронно!!! ● RabbitMQ + MySQL ● Шардинг ● Хитрая агрегация данных
  27. 27. Новый график статистики
  28. 28. Как анализировать статистику? ● Фильтры: – Почтовый сервис (gmail, hotmail etc..) – Тип письма – Язык – … ● С помощью фильтров делаем полезные графики ● С помощью фильтров локализуем проблему
  29. 29. Статистика без фильтров — как бы все хорошо..
  30. 30. Фильтр «письмо о новом сообщении/Español» - проблема генерации контента на испанском
  31. 31. Фильтр «письмо о новом сообщении/AOL» - письма попали в спам
  32. 32. MTA: Фильтр «письмо о новом сообщении» - проблема с плохими адресами
  33. 33. Делаем Dashboards
  34. 34. Жалобы пользователей
  35. 35. Жалобы: Feedback Loop (FBL) ● Работает в yahoo, hotmail, mail.ru и т д. ● Подключается в интерфейсе postmaster почтового сервиса. ● отсылается уведомление при нажатии на кнопку «Это спам» ● Пересылается оригинал письма, на которое пожаловались ● Обрабатываем жалобы (отписываем от рассылок) и добавляем в статистику жалоб.
  36. 36. Жалобы: List-Unsubscribe ● Работает в Gmail, yandex и т. д. ● Встраиваем в письмо: List-Unsubscribe: <mailto:unsubscribe@mamba.ru?subject=...> ● Отсылается уведомление при нажатии на кнопку «Это спам», «Отписаться от рассылки» и т. д. ● Оригинал письма не пересылается, данные для обработки жалобы передаем через subject письма
  37. 37. Фильтр «письмо о новом сообщении / Italiano» - некорректный перевод письма
  38. 38. Анализ жалоб ● При всплеске жалоб необходимо выяснить причину жалоб ● Локализуем причину жалоб с помощью фильтров в статистике (язык, тип письма,..) ● Практика показывает что пользователи просто так жаловаться не будут — FBL как механизм поиска ошибок.
  39. 39. Мониторинг почты
  40. 40. Мониторинг почты ● Количество отосланных писем, просмотров писем, переходов из писем с применением различных фильтров ● Количество жалоб на письма с применением различных фильтров ● Количественных характеристики логов MTA ● Пороги срабатывания мониторинга ставятся индивидуально, в зависимости от многих параметров
  41. 41. Спасибо за внимание Лебедев Алексей, Team leader htp://corp.wamba.com/ru/ a.lebedev@wamba.com

×