Залежність 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',
),
В результаті ми очищаємо кеш і переходимо на сторінку налаштувань модуля, де повинна зникнути помилка про відсутність бібліотеки.