Цікавий кейс май на днях: сповіщення з сайту приходили на джімейл із замізненням в 15хв-3 години… При цьому, клієнт працює в області швидкого харчування і при запізненні компенсовує 1 гривню / хвилину…
Перше, що перевірив — чи не грішить відправкою стандартною функцією mail(). Проте замовник використовував відправку з smtp авторизацією, не підкопаєшся. Варіант вирішити задачу за 15 хвилин не пройшов…
Наступне коло перевірки — взаємодія з третім сервером. В клієнта три кухні і залежно від локації свого кастумера замовлення відправляється на одну з цих трьох кухонь. Визначенням кухні займається софт написаний на java, що працює на окремому сервері. Нажаль і тут перебоїв не виявив. Після цього пішов штурмувати автомат за другою кавою.
Проект був написаний на Laravel. Я поки не надто знайомий з цим іщядієм, а тому подивитись, що там під капотом відкладав чи не до останнього. Наступні кілька годин перебирав контролер за контролером в пошуках причини — були косяки, але не такі ґрунтовні, щоб буксувало доставку 3 години…
Врешті я перейшов до того, з чого варто було б почати: почав тестити швидкість доставки на різних ящиках і помітив, що якщо вводити мило клієнта на будь-якому іншому сервісі крім джімейлу, то доставка листа відбувається протягом хвилини…
Протестив ще кілька разів, замінив мило адміна на укрнетівське і чудо: сповіщення почали приходити практично відразу. Теж саме спостерігалось, коли замінював сервер відправника на gmail. В результаті стало зрозуміло, що буксує тільки при відправці з поштового сервісу проекту на пошту gmail. В інших випадках: якщо використовувати інший поштовий сервіс-відправник все було ок.
З цієї радості я згадав, що варто пообідати 🙂
Після повернення почав перебирати view листа на Laravel — чи там в тегах нема чогось такого, що б викликало відторгнення. Як Ви розумієте ще одна година пішла на безрезультатні дослідження.
І тут я додумався постукати в сапорт хостингу… Виявилось, що попри переїзд проекту на vps сервер, в сервісі відправки листа замовник використовував адресу загального серверу. Тобто будучи живучи в особняку бізнес вів переписку з гуртожитку…
Хто не в курсі, через загальні сервери, на яких розташовано безліч проектів часто здійснюється спам-розсилка, якщо якийсь із проектів взламується, а таке буває нерідко. Зазначу, що вже після першої такої оказії хост попадає в список реципієнтів, який слід перевіряти — власне ця перевірка і створювала затримку в прийомі пошти на джімейл.
Відтак, можна було вирішити задачу двома способами: правильним-правильним, піднявши на його сервері поштовий сервіс. В силу відсутності прямих скілів по цьому це означало ще один вбитий день… Другий спосіб, просто прийнятний — зробити так, щоб мейли мали кращу репутацію.
Одним із варіантів це реалізувати є: DKIM.
DKIM (DomainKeys Identified Mail) — це метод email аутинтифікації. Він будується на перевірці цифрового підпису для аутинтефікації адреси. Все солідно, зі зберігання публічного ключа в TXT-записах домену.
Відтак, тепер навіть, якщо кур’єр нашого клієнта виходитиме з брудного гуртожитку, то на ньому завжди буде охайна уніформа, а відтак джімейлом він сприйматиметься вже як людина з пристойної компанії.
Як результат я попутно зацінив фреймворк Laravel — далеко не найгірше рішення для побудови цікавих проектів. Напевне спробую на ньому щось габаритне наступного разу.