每次明确打开时,PHP文件都会发送邮件

时间:2017-07-09 07:33:34

标签: php email phpmailer

我有一个在PHPMailer帮助下制作的联系页面。最小代码如下

<form class="form-horizontal" method="POST" action="Mail.php" name="contactForm">
...
</form>

这很好用,但每当我尝试在网络服务器上显式打开Mail.php时,网络服务器每次都会发送blank个电子邮件。每当我访问Mail.php screenshot

时,都会显示电子邮件的屏幕截图

以下是来自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?

3 个答案:

答案 0 :(得分:2)

你应该检查php文件中的请求是否为POST,例如:

if(isset($_POST['from'])){
   // send email 
}

当您尝试明确打开Mailer.php时,您的请求为GET

<强>更新

from不是表格!这是你的形式输入之一! :<input name="from" type="text">,当您尝试明确打开name时,您可以使用其他字段,例如:messageMailer.phpfrom或{{1}或toname或....填充subject,因此无需检查所有内容!

只需检查例如$_POSTto

即可
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
}