Поскольку это популярная ошибка, проверьте PHPMailer Wiki на устранение неполадок.
Также это сработало для меня
$mailer->Port = '587';
Нельзя ставить пробелы вокруг знака '='.
Когда вы пишете:
STR = "foo"
bash пытается выполнить команду с именем STR с 2 аргументами (строки '=' и 'foo')
Когда вы пишете:
STR =foo
bash пытается выполнить команду с именем STR с 1 аргументом (строка '=foo')
Когда вы пишете:
STR= foo
bash пытается выполнить команду foo с STR, установленным в пустую строку в окружении.
Я не уверен, помогает ли это прояснить ситуацию или это просто обфускация, но обратите внимание, что:
STR "=""foo"
,STR "=foo"
,STR="" foo
. Соответствующий раздел спецификации языка sh, раздел 2.9.1 гласит:
"Простая команда" - это последовательность необязательных назначений переменных и перенаправлений, в любой последовательности, за которыми по желанию следуют слова и перенаправления, завершаемые оператором управления.
В этом контексте слово
- это команда, которую собирается выполнить bash. Любая строка, содержащая =
(в любой позиции, кроме начала строки), которая не является перенаправлением, является присвоением переменной, а любая строка, которая не является перенаправлением и не содержит =
, является командой. В STR = "foo"
, STR
не является присвоением переменной.
Уберите пробелы вокруг знака =
:
#!/bin/bash
STR="Hello World"
echo $STR
В интерактивном режиме все выглядит нормально
$ str="Hello World"
$ echo $str
Hello World
Очевидно! как сказал Йоханнес, вокруг знака "=" нет места. Если вокруг '=' есть пробел, то в интерактивном режиме он выдает ошибку: `
Команда 'str' не найдена