当用户输入电子邮件包含在其他PHP文件中时,PHP mail()将不会发送

时间:2014-03-10 17:40:52

标签: php html email

我正在从数据库生成一页信息。我需要发送一封包含页面内容的电子邮件作为提醒。 (这里的示例将输入作为消息) 它接收一个电子邮件地址,并且应该将详细信息发送到该地址。

<div class="container">
        <?php
            $name = $_GET['info'];

            if(isset($name)){

                $info = explode('|', $name);

                /*****************************************************
                        open conection to the mySQL database
                ******************************************************/
                                         ....
                /*****************************************************
                        Populate the page 
                ******************************************************/
                $sql="Select information from table";

                $result = mysqli_query($con,$sql);


                while($row = mysqli_fetch_array($result))
                {
                    /*Title*/
                    echo '<h1>'.$row['post_title'].'</h1><hr>';

                    /*content*/
                    echo '<h2>Details: </h2><br>'.$row['post_content'].'<br>';

                    $content = $row['post_title'];

                    /*Reminder*/
                    echo '<div data-role="collapsible">
                        <h1>Send a reminder</h1>';
                        include("includes/email_reminder.php");             
                    echo'</div>';
                }


                /*****************************************************
                        Close connection
                ******************************************************/
                mysqli_close($con);

            } else {

                echo'Nothing selected. Go back <br> 
                <a href="#" data-rel="back"> <img src="img/icon/Back.png" style="height: 3em" > </a>';

            }
        ?>

    </div>

这会在页面底部创建一个表单,以接收需要提醒的电子邮件。 这是email_reminder.php:

<?php
function spamcheck($field)
{
    // Sanitize e-mail address
    $field=filter_var($field, FILTER_SANITIZE_EMAIL);
    // Validate e-mail address
    if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
?>

<?php
    // display form if user has not clicked submit
    if (!isset($_POST["submit"]))
    {
?>    

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Your Email: <input type="text" name="to"><br>

Subject: <input type="text" name="subject"><br>

Message: <textarea rows="10" cols="40" name="message"></textarea><br>

<input type="submit" name="submit" value="Submit Feedback">

</form>

<?php 
    }
    else    // the user has submitted the form

    {
        // Check if the "from" input field is filled out
        if (isset($_POST["to"]))
        {
            // Check if "from" email address is valid
            $receivecheck = spamcheck($_POST["to"]);

            if ($receivecheck==FALSE)
            {
                echo "Invalid input";
            }

            else
            {
                $to = $_POST["to"]; //receiver

                $subject = $_POST["subject"];

                $message = $_POST["message"];

                // message lines should not exceed 70 characters (PHP rule), so wrap it
                $message = wordwrap($message, 70);

                // send mail
                mail("$to",$subject,$message,"From: myaddress@mail.com\n");

                echo "reminder has been sent";
            }
        }
    }
?>    

我已经单独使用该表单(只是自己打开了email_reminder.php),它从我使用的任何电子邮件地址正确发送了电子邮件。它只是在包含在其他脚本中时才发送。

2 个答案:

答案 0 :(得分:1)

include(emai_reminder.php);需要围绕文件名的单引号(并且电子邮件拼写正确:include('email_reminder.php');

但是,看起来你需要更多的帮助而不仅仅是这个。例如,虽然您引用了FROM,但表单中没有字段$_POST["from"]。您正在针对该变量运行验证,该变量不存在,验证失败,这会阻止else if块运行,从而阻止mail()被调用。

答案 1 :(得分:0)

邮寄到不同的用户定义地址的几个原因可能无效:

1。)检查mail()调用TRUE的结果,只是为了确保基础sendmail(如果你在Linux上)没有返回错误。

2.。)添加其他标头以防止在向国外SMTP主机发送邮件时出现问题,可以在PHP doc for mail()上找到示例

3.。)在某些情况下(即在Windows上使用SMTP时)使用PEAR Mail package可能会解决您的问题。它还支持ASMTP,与mail()函数相比,错误捕获更容易。