一整天都试图通过发送到我的服务器的终端命令从<form>
通过php发送邮件。
这样做的原因是我使用phpmailer从网站发送邮件,但随后google将我的网站标记为非法登录。
所以我认为这可以通过将邮件服务器安装到我的网络服务器并通过它邮寄来轻松完成。
到目前为止一切顺利,我的邮件服务器设置和命令行的邮件工作得很好。
但现在困难的部分是:让网站从我的表单中获取变量并将它们放入终端的命令中。
我尝试了几种方法将命令放入变量并执行变量但到目前为止没有任何工作。
我现在拥有以下内容:
PHP部分:
<?php
//Database
require_once 'includes/dbconfig2.php';
// Get our database connector
require("includes/conn.php");
//Class
$reg=new USER($DBcon);
if (isset($_POST['send'])) {
$from = $_POST['email'];
$name = htmlspecialchars($_POST['name']);
$message = nl2br(htmlspecialchars($_POST['message']));
$email = "[email protected]";
$subject = "Hey, ik ben er bij op de trouwerij!";
$contentmail = '<? echo "echo "<b>Bedankt voor het melden.</b><br><br>Mail van: Willem<br>Mail adres: [email protected]<br><br><b>Bericht:</b><br><br>test" | mail -s "$(echo -e "Hey, ik ben er bij op de trouwerij.\nContent-Type: text/html")" [email protected] "?>';
}
if (empty($_POST) === false) {
$errors = array();
if (empty($name) === true || empty($email) === true || empty($message) === true) {
$errors[] = '<p><font color="#FF0000">Naam, email en bericht zijn verplicht!</p>';
} else {
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$errors[] = '<p><font color="#FF0000">Dat is geen geldig email adres</p>';
}
if (ctype_alpha(str_replace(array(' ', "'", '-'), '', $name)) === false) {
$errors[] = '<p><font color="#FF0000">Naam mag enkel letters bevatten</p>';
}
}
if (empty($errors) === true) {
(shell_exec('$contentmail'));
{
if(true)
{
header('Location: sent.php?sent');
exit();//redirect user
}
}
}
}
?>
形式:
<form class="form-inline" action="index.php" method="post">
<div class="row animate-box">
<div class="col-md-12 col-md-offset-1">
<div class="col-md-2 col-sm-4">
<div class="form-group">
</div>
</div>
<div class="col-md-6 col-sm-4">
<div class="form-group">
<label for="name" class="sr-only">Naam</label>
<input type="text" class="form-control" name="name" id="name" placeholder="Uw naam"<?php if (isset($_POST['name']) === true) {echo 'value="', strip_tags($_POST['name']), '"'; }?>/>
</div>
</div>
<div class="col-md-4 col-sm-4">
<div class="form-group">
</div>
</div>
</div>
</div>
<div class="row animate-box">
<div class="col-md-12 col-md-offset-1">
<div class="col-md-2 col-sm-4">
<div class="form-group">
</div>
</div>
<div class="col-md-6 col-sm-4">
<div class="form-group">
<label for="name" class="sr-only">Email</label>
<input type="email" class="form-control" name="email" id="email" placeholder="Email"<?php if (isset($_POST['email']) === true) {echo 'value="', strip_tags($_POST['email']), '"'; }?>/>
</div>
</div>
<div class="col-md-4 col-sm-4">
<div class="form-group">
</div>
</div>
</div>
</div>
<div class="row animate-box">
<div class="col-md-12 col-md-offset-1">
<div class="col-md-2 col-sm-4">
<div class="form-group">
</div>
</div>
<div class="col-md-6 col-sm-4">
<div class="form-group">
<label for="message" class="sr-only">Bericht:</label>
<textarea class="form-control" rows="5" name="message" id="message" placeholder="Bericht"/><?php if (isset($_POST['message']) === true) {echo strip_tags($_POST['message']) ; }?></textarea>
</div>
</div>
<div class="col-md-4 col-sm-4">
<div class="form-group">
</div>
</div>
</div>
</div>
<div class="row animate-box">
<div class="col-md-12 col-md-offset-1">
<div class="col-md-3 col-sm-4">
<div class="form-group">
</div>
</div>
<div class="col-md-4 col-sm-4">
<input class="btn btn-default btn-block" type="submit" name="send" value="Ja, ik ben er bij!" style="left: auto"/>
</div>
<div class="col-md-5 col-sm-4">
<div class="form-group">
</div>
</div>
</div>
</div>
</form>
有人可以帮我解释为什么这个代码没有在服务器的终端/ shell上执行,以及我如何让它工作?
提前致谢!
编辑:制作一个bash脚本来接管我在变量中的命令,并让exec命令执行bash脚本。脚本本身可以从终端在服务器上运行,但页面没有运气。出于某种原因,我的页面不断重新加载到index.php而不是执行脚本,而只有执行和变量的php确实有效。
这段代码:shell_exec('$contentmail')
试图执行字符串$contentmail
,而不是它的内容。这是PHP中single and double quoted strings的区别。
第二个问题是$contentmail
变量的内容 - shell将尝试运行<? echo "echo "<b>Bedankt voo...
,这不是一个有效的命令。
如果您自己的服务器安装了SMTP服务器,您可以尝试使用PHP的内置函数mail()
发送电子邮件,或者(更好)在本地使用PHPMailer。