2014-10-22 2 views
0

У меня есть сценарий powershell, который отправляет электронное письмо, которое вызывается из скрипта php. Все работает отлично, пока я не добавлю параметр body через переменную php. Эта линия работает:Отправка электронной почты с помощью скрипта Powershell из PHP

$oExec = $WshShell->Run("C:\\path\\powershell.exe C:\\path\\email.ps1 \"{$email}\" \"Test Body""); 

Они рядом 2 оба не работают:

$oExec5 = $WshShell->Run("C:\\path\\powershell.exe C:\\path\\email.ps1 \"{$email}\" \"{$body}\""); 
$oExec5 = $WshShell->Run("C:\\path\\powershell.exe C:\\path\\email.ps1 \"{$email}\" {$body}"); 

Я очень смущен, сначала я думал, что это было связано с содержанием переменной, но я чувствую, исключить эту возможность, установив $ body = "Test Body" точное значение, которое работает при жестком кодировании. Я в тупик, пожалуйста, помогите.

+1

Если $ email или $ body содержат метахары оболочки и особенно символы '' ', то вы собираетесь вводить синтаксические ошибки командной строки. –

+0

Да, я думал, что это как-то связано с этим. очевидно, что мой почтовый ящик будет строкой, как я могу добавить переменную string php в мой вызов командной строки powershell? – mgrenier

+0

вы уже знаете, что вам нужно сделать, это убедиться, что содержимое вашей php-переменной отформатировано так, что они видны должным образом с помощью PowerShell, например, вы страдаете от эквивалента оболочки, вызванного уязвимостью в sql-инъекции. –

ответ

0

Оказывается, ответ был довольно прост. Я добавил одиночные кавычки вокруг сообщения тела, и моя проблема была решена.

$command = "C:\\path\\email.ps1 \"{$email}\" 'This is the body text'"; 

$oExec5 = $WshShell->Run("C:\\path\\powershell.exe {$command}"); 

Одна проблема, я обнаружил, что там, кажется, предел символов на длину текста, который я могу поместить в тело письма.

Смежные вопросы