Плагін «Вимкнути всю електронну пошту» для WordPress

Завдання Зробити неможливим надсилання вихідної пошти на сайті, адреса сервера якого ніколи не повинна з'являтися у звіті про спам.

Плагін WordPress, який унеможливлює вихідну пошту, а не просто деконфігурує її. Один файл, жодного екрана налаштувань, нічого не записується в базу даних. Він опублікований як продукт з відкритим кодом під ліцензією GPL‑3.0.

Джерело, проблеми та релізи: github.com/kostyasorokin/wp-disable-all-email

Проблема, яку це вирішує

Сайт, який не може доставляти пошту, не просто тихий. Боти заповнюють його контактні та реєстраційні форми, сайт надсилає підтвердження на адресу, яку надав бот, і ці адреси належать реальним людям, які натискають “спам”. За ними накопичуються відхилені листи, а адреса сервера потрапляє до списку заблокованих — зазвичай це помічають, коли хост пише, щоб запитати, що відбувається.

Зупинка демона пошти не запобігає цьому. На типовому хості виконуваний файл sendmail все ще присутній, PHP передає повідомлення безпосередньо йому, і він відкриває власне зовнішнє з'єднання. Демон вимкнено, і пошта все одно відправляється.

Як це проходить

Два шари, і лише один з них коли-небудь працює. Як обов'язковий плагін, файл завантажується до того, як WordPress оголошує свій власний wp_mail(), тому спочатку береться ім'я, і далі нічого не можна надіслати — більше немає фільтра для видалення та плагіна, який може перевершити його.

Якщо якийсь інший обов'язковий плагін потрапив туди першим, цей шар пропускається, і замість нього фільтр зупиняє основний відправник. Ці два шари є доповнювальними, а не поясом та дужками: той, який досяжний, той і спрацьовує.

Те, що повідомляють абоненту після цього, є вибором, встановленим константою. Повідомлення про успішні результати забезпечує нормальне завершення форм та оформлення замовлення; повідомлення про невдачі – це чесна відповідь, коли немає іншого каналу доставки, ціною показу помилки кожному відвідувачу.

Що воно не може зробити

Жоден плагін не може перехопити код, який викликає власну поштову функцію PHP, відкриває власний SMTP-сокет або надсилає повідомлення до поштового API з необробленим cURL. Такі дії закриваються на сервері шляхом вимкнення функції або блокування вихідних портів — і якщо метою є репутація однієї IP-адреси, це також потрібно зробити.

Суть у тому, щоб так сказати. Це закриває проблему, пов'язану з WordPress, і чітко показує, де знаходиться інша половина.

Як потрапити назад

WordPress надсилає посилання для відновлення електронною поштою, коли плагін або тема фатально виходить з ладу, і зберігає лише його хеш — тому посилання, яке можна використовувати, існує лише в цьому повідомленні. Якщо його мовчки видалити, несправний сайт можна буде виправити лише через SSH.

Плагін перебудовує це посилання та записує його туди, де його все ще можна прочитати, і передає його дії, щоб його можна було надіслати кудись ще. Він також реєструє запис про стан сайту, оскільки обов’язковий плагін легко забути, а “електронна пошта перестала працювати” досліджується на основі стану сайту, а не зі списку плагінів.

Ролі

Розробник
Konstantin Sorokin

Виконано
  • Розробка плагіна, один файл без запису в базу даних
  • Дворівневе придушення пошти за допомогою підключаємих wp_mail та pre_wp_mail
  • Захоплення посилання в режимі відновлення, тому фатальну помилку все ще можна виправити
  • Звіт про перевірку стану сайту, чому не надходить пошта
  • Документація та реліз з відкритим вихідним кодом