我试着做我的研究,有丰富的方法调用shell命令,甚至更多的方法来删除有害的字符,我来stackoverflow专家的最佳建议。
我希望找到像我见过的其他语言一样的东西,这样向命令发送参数实际上是通过函数传递的,比如:
do_command("ls","-l",$Directory);
它将为您处理$Directory变量中任何有害的内容。我还没有在PHP中发现这一点。
这是我正在使用的代码:
<?php
session_start();
$AdminEmail = "random_email@gmail.com";
$CatalogEmails = array("");
$QuoteEmails = array("");
$PartsEmails = array("");
$Subject = $_SESSION['Email_Subject'];
$Body = $_SESSION['Email_Body'];
$Headers = $_SESSION['Email_Headers'];
$Type = $_SESSION['Type'];
msmtp($AdminEmail, $Subject, $Body, $Headers, "meyers");
if ($Type == "Catalog") {
foreach ($CatalogEmails as $AdditionalEmail) {
msmtp($AdditionalEmail, $Subject, $Body, $Headers, "meyers");
}
} else if ($Type == "Quote") {
foreach ($QuoteEmails as $AdditionalEmail) {
msmtp($AdditionalEmail, $Subject, $Body, $Headers, "meyers");
}
} else if ($Type == "Parts") {
foreach ($PartsEmails as $AdditionalEmail) {
msmtp($AdditionalEmail, $Subject, $Body, $Headers, "meyers");
}
}
function msmtp($To, $Subject, $Body, $Headers, $Account) {
$Email = "To: $To\nSubject: $Subject\n$Headers\n\n$Body\n";
exec("echo \"$Email\" | msmtp --account=$Account $To");
}
session_destroy();
?>我知道有一个内置的PHP邮件功能,可以很好地解决这个问题,但我正在运行多个SMTP服务器,msmtp是我使用的一个程序,它根据发送电子邮件的“帐户”发送电子邮件。在本例中,它将是"meyers“帐户。
所有的会话变量都包含超文本标记语言(<br>的<b>,等等)和一些$_POST变量。
我知道使用echo是一种可怕的方式,这就是为什么我要使用stackoverflow。我在这里的目标是,无论他们向我抛出任何疯狂的字符,电子邮件都能通过。我知道shell/bash很挑剔--我认为它不仅仅是转义双引号。
我试过使用escapeshellcmd、escapeshellarg和htmlentities,它们要么漏掉太多,要么把电子邮件中的超文本标记语言搞乱了。
发布于 2011-02-22 10:29:59
将电子邮件内容写入文件,然后将文件内容重定向为msmtp命令的输入。
file_put_contents($tempfile,$Email);
exec("msmtp --account=$Account $To < $tempfile");发布于 2011-02-22 08:54:41
PHP使用的是Bourne shell (sh)还是Bash?在这两种情况下,最好使用printf
exec("printf '%s' '$Email' | msmtp --account=$Account $To");如果您正在使用Bash,您可以尝试它的printf的报价功能
exec("printf '%q' '$Email' | msmtp --account=$Account $To");https://stackoverflow.com/questions/5072493
复制相似问题