Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP通过Powershell脚本发送电子邮件_Php_Powershell - Fatal编程技术网

从PHP通过Powershell脚本发送电子邮件

从PHP通过Powershell脚本发送电子邮件,php,powershell,Php,Powershell,我有一个powershell脚本,它发送一封从php脚本调用的电子邮件。在我通过php变量添加body参数之前,一切都很好。这条线路的工作原理是: $oExec = $WshShell->Run("C:\\path\\powershell.exe C:\\path\\email.ps1 \"{$email}\" \"Test Body""); 接下来的两个都不起作用: $oExec5 = $WshShell->Run("C:\\path\\powershell.exe C:\\pa

我有一个powershell脚本,它发送一封从php脚本调用的电子邮件。在我通过php变量添加body参数之前,一切都很好。这条线路的工作原理是:

$oExec = $WshShell->Run("C:\\path\\powershell.exe C:\\path\\email.ps1 \"{$email}\" \"Test Body"");
接下来的两个都不起作用:

$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=testbody来消除了这种可能性,这是硬编码时的精确值。我被难住了,请帮帮忙。

原来答案很简单。我在正文中加了单引号,我的问题就解决了

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

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

我发现的一个问题是,我可以在正文消息中输入的文本长度似乎有一个字符限制。

如果$email或$body包含shell元字符,尤其是char,那么您将引入命令行语法错误。是的,我认为这与此有关。很明显,我的电子邮件正文将是一个字符串,我如何才能将php字符串变量添加到我的powershell命令行调用中?您已经是了。您需要做的是确保对php变量的内容进行格式化,以便powershell能够正确地看到它们。e、 g.您正遭受相当于sql注入漏洞的shell攻击。因此,当我回显out C:\\path\\powershell.exe C:\\path\\email.ps1\{$email}\\{$body}\时,结果是一行代码,我可以复制并粘贴到powershell中,它会发送电子邮件,但它不会来自php…不确定为什么需要将整个powershell命令构建为字符串文本,并转义所有php变量。然后将该文本作为参数传递给Run方法。正如@MarcB所指出的,确保您避开任何花哨的元字符,或者对它们进行编码。