【发布时间】:2018-03-03 16:21:31
【问题描述】:
整天试图通过 php 从<form> 发送邮件,终端命令发送到我的服务器。
原因是我使用 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 = "mail@to.address";
$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: mail@from.address<br><br><b>Bericht:</b><br><br>test" | mail -s "$(echo -e "Hey, ik ben er bij op de trouwerij.\nContent-Type: text/html")" mail@to.address "?>';
}
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 确实可以工作。
【问题讨论】:
-
我会将行写入一个名为
mail_queue之类的数据库表,其中包含所有必需的参数,以将正确的电子邮件发送到正确的位置。然后让您的命令行脚本读取该表并创建电子邮件。实际上是一项 CRON 工作 -
是的,但这不是我想做的,我想学习如何从终端执行命令...我现在制作了一个 bash 脚本,可以发送邮件但仍然没有得到它的工作原理是 php 执行脚本以便发送邮件......