Upload
ontico
View
246
Download
2
Embed Size (px)
Citation preview
Почта в интернет-проекте:
инфраструктура, статистика, мониторинг
Лебедев Алексей
Почтовая инфраструктура
● 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=<[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)
● Действия: отправляем результат успешной отправки в статистику.
Почтовые логи — 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
● Применяем временную блокировку данного адреса
Почтовые логи — 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)
● Добавляем данные в статистику с особым статусом
● Применяем временную блокировку, мониторинг, ...
Почтовые логи — 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
● Блокируем отправку писем
● Хранилище «битых» адресов
Почтовые логи — 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))
● Добавляем данные в статистику с особым статусом
● Применяем временную блокировку, мониторинг, ...
Программный код для отправки писем
● Письмо должно удовлетворять многим 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:[email protected]?subject=...>
● Отсылается уведомление при нажатии на кнопку «Это спам», «Отписаться от рассылки» и т. д.
● Оригинал письма не пересылается, данные для обработки жалобы передаем через
subject письма
Фильтр «письмо о новом сообщении / Italiano»- некорректный перевод письма
Анализ жалоб
● При всплеске жалоб необходимо выяснить причину жалоб
● Локализуем причину жалоб с помощью фильтров в статистике (язык, тип письма,..)
● Практика показывает что пользователи просто так жаловаться не будут — FBL как механизм поиска ошибок.
Мониторинг почты
Мониторинг почты
● Количество отосланных писем, просмотров писем, переходов из писем с применением различных фильтров
● Количество жалоб на письма с применением различных фильтров
● Количественных характеристики логов MTA● Пороги срабатывания мониторинга ставятся
индивидуально, в зависимости от многих параметров
Спасибо за внимание
Лебедев Алексей, Team leaderhtp://corp.wamba.com/ru/[email protected]