我有一个在PHPMailer帮助下制作的联系页面。最小代码如下
<form class="form-horizontal" method="POST" action="Mail.php" name="contactForm">
...
</form>
这很好用,但每当我尝试在网络服务器上显式打开Mail.php时,网络服务器每次都会发送blank
个电子邮件。每当我访问Mail.php
以下是来自PHPMailer的Mail.php的最小代码
$mail->Subject = $subject;
$mail->Body = "<b>From: </b>". $sender. "<br>" ." <b>Name: </b>". $yourName. "<br>". "<b> Message Body </b>" .$message;
$mail->AltBody = "<b>From: </b>". $sender. "<br>" ." <b>Name: </b>". $yourName. "<br>". "<b> Message Body </b>" .$message;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
}
else {
echo "Message has been sent....You're being redirected.....";
}
如何限制用户显式访问Mail.php?
答案 0 :(得分:2)
你应该检查php文件中的请求是否为POST
,例如:
if(isset($_POST['from'])){
// send email
}
当您尝试明确打开Mailer.php
时,您的请求为GET
。
<强>更新强>
from
不是表格!这是你的形式输入之一! :<input name="from" type="text">
,当您尝试明确打开name
时,您可以使用其他字段,例如:message
或Mailer.php
,from
或{{1}或to
或name
或....填充subject
,因此无需检查所有内容!
只需检查例如$_POST
或to
:
from
答案 1 :(得分:2)
因此,正如Jiri Hrazdil和Ahmad Mobaraki所建议的那样,使用isset
可以解决我的问题,但我无法弄清楚如何实现这一点。所以我提出了自己的解决方案。我检查一下,如果变量首先是空的,那么如果有人直接尝试访问该文件,它会显示Fields are empty
的消息,这就是我这样做的方式。
require 'PHPMailer/PHPMailerAutoload.php';
$yourName = $_POST['yourName'];
$sender = $_POST['emailID'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$to = 'email@email.com';
header('Refresh: 5; URL=whatever.php');
if(empty($yourName) || empty($sender) || empty($subject) || empty($message) || empty($message))
{
echo "Fields are empty";
}
else
{
//Working Code of PHP Mailer
}
答案 2 :(得分:1)
您可以添加一个条件来检查表单中的值是否已填充:
if (isset($_POST['sender'])) {
// send mail
}