Залежність PHPMailer в SMTP Drupal

Сьогодні я розповім коротку історію про те, що робити у випадку застарілого сайту.

У нас був старий сайт на Drupal 8.8, який потрібно було перенести на інший хостінг, який не дуже дружив з Google через пошту. Для того, щоб листи приходили з сайту, їх потрібно було відправляти через пошту домену та SMTP.

Проблема полягала в тому, що сайт був створений давно, іншими розробниками, в ті часи, коли якість роботи не була дуже високою, і composer був застарілим. Оскільки версія ядра була 8.8, ми повинні були використовувати модуль SMTP 8x-1.1, і composer на новому хості просто відмовлявся працювати зі старими версіями файлів і бібліотек.

В той же час спроби зробити копію сайту на звичайному VPS-сервері не були успішними і викликали лише нову купу помилок.

Спершу ми знайшли робочий сайт з встановленим SMTP, і скопіювали папку phpmailer з папки vendor на наш новий хост.

Потім нам потрібно було відредагувати файл composer.lock і приблизно після 7191 рядка додати цей код.

{
           "name": "phpmailer/phpmailer",
           "version": "v6.4.0",
           "source": {
               "type": "git",
               "url": "https://github.com/PHPMailer/PHPMailer.git",
               "reference": "050d430203105c27c30efd1dce7aa421ad882d01"
           },
           "dist": {
               "type": "zip",
               "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/050d430203105c27c30efd1dce7aa421ad882d01",
               "reference": "050d430203105c27c30efd1dce7aa421ad882d01",
               "shasum": ""
           },
           "require": {
               "ext-ctype": "*",
               "ext-filter": "*",
               "ext-hash": "*",
               "php": ">=5.5.0"
           },
           "require-dev": {
               "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
               "doctrine/annotations": "^1.2",
               "phpcompatibility/php-compatibility": "^9.3.5",
               "roave/security-advisories": "dev-latest",
               "squizlabs/php_codesniffer": "^3.5.6",
               "yoast/phpunit-polyfills": "^0.2.0"
           },
           "suggest": {
               "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
               "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
               "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
               "psr/log": "For optional PSR-3 debug logging",
               "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
               "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
           },
           "type": "library",
           "autoload": {
               "psr-4": {
                   "PHPMailer\\PHPMailer\\": "src/"
               }
           },
           "notification-url": "https://packagist.org/downloads/",
           "license": [
               "LGPL-2.1-only"
           ],
           "authors": [
               {
                   "name": "Marcus Bointon",
                   "email": "[email protected]"
               },
               {
                   "name": "Jim Jagielski",
                   "email": "[email protected]"
               },
               {
                   "name": "Andy Prevost",
                   "email": "[email protected]"
               },
               {
                   "name": "Brent R. Matzelle"
               }
           ],
           "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
           "support": {
               "issues": "https://github.com/PHPMailer/PHPMailer/issues",
               "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.4.0"
           },
           "funding": [
               {
                   "url": "https://github.com/Synchro",
                   "type": "github"
               }
           ],
           "time": "2021-03-31T20:06:42+00:00"
       },

Після цього правимо  vendor/composer/autoload_psr4.php та додаємо у передостанню строку

'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),

перед

);

Після цього правимо файл vendor/composer/autoload_static.php , а саме йдемо до public static $prefixLengthsPsr4 = array ( та шукаємо такий код

'P' => 
        array (

та додаємо в кінці цього "блоку

'PHPMailer\\PHPMailer\\' => 20,

Після цього, в public static $prefixDirsPsr4 = array ( додаємо код перед );

'PHPMailer\\PHPMailer\\' =>
        array (
            0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
        ),

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

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.
Код мови коментаря.