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

Post on 07-Jul-2015

249 Views

Category:

Internet

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

IP адрес

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

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

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

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

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

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

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

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

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

DomainKeys Identified Mail (DKIM)

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

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

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

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

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

DomainKeys

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

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

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

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

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

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

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

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

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

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

Почтовые логи — 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)

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

Почтовые логи — 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

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

Почтовые логи — 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)

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

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

Почтовые логи — 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

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

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

Почтовые логи — 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))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

postmaster.yandex.ru

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

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

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

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

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

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

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

● Тип письма

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

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

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

● Язык

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

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

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

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

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

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

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

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

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

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

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

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

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

– Тип письма

– Язык

– …

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

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

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

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

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

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

Делаем Dashboards

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

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

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

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

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

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

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

Жалобы: List-Unsubscribe

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

List-Unsubscribe: <mailto:unsubscribe@mamba.ru?subject=...>

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

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

subject письма

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

Анализ жалоб

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

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

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

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

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

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

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

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

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

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

Лебедев Алексей, Team leaderhtp://corp.wamba.com/ru/a.lebedev@wamba.com

top related