为什么我的电子邮件不是通过PHP从订单成功页面发送的

时间:2015-09-18 08:53:10

标签: php mysql

我有一个订单成功页面,如果您的订单成功,您将被定向到该页面,并且它还会将您的订单状态更新为成功。为什么我的电子邮件没有发送给用户?

<?php
    $url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

    if (strpos($url,'order-success') !== false) {
        $servername = "REMOVED";
        $username = "REMOVED";
        $password = "REMOVED";
        $dbname = "REMOVED";

        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);

        // Check Connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        $sql = "UPDATE orders SET Status = 'Success' WHERE Status = 'Incomplete' AND Username = '{$_SESSION['Username']}' ORDER BY OrderID DESC LIMIT 1;";
        echo $sql;

        if ($conn->query($sql) === TRUE) {
            $to .= ''. $_SESSION['Username']. '';
            $subject = 'Order Confirmation';

            $message = '
            <html>
            <head>
                <title>Birthday Reminders for August</title>
            </head>
            <body>
                <p>Here are the birthdays upcoming in August!</p>
                <table>
                    <tr>
                        <th>Person</th>
                        <th>Day</th>
                        <th>Month</th>
                        <th>Year</th>
                    </tr>
                    <tr>
                        <td>Joe</td>
                        <td>3rd</td>
                        <td>August</td>
                        <td>1970</td>
                    </tr>
                    <tr>
                        <td>Sally</td>
                        <td>17th</td>
                        <td>August</td>
                        <td>1973</td>
                    </tr>
                </table>
            </body>
            </html>
            ';

            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

            mail($to, $subject, $message, $headers);
        }

        else {
            session_destroy();
        }

        $conn->close();
    }
?>

请忽略我发送的消息,这是一个例子,我实际上不打算使用它。我只是想在订单状态设置为成功时收到要发送的电子邮件。

有什么问题?

5 个答案:

答案 0 :(得分:1)

首先,mail()函数根据成功返回true或false,检查

其次,检查您的垃圾邮件文件夹中的电子邮件,有numerous ways to approach this problem

答案 1 :(得分:0)

从您的来源,我发现可能存在两个主要问题。

  1. 使用session_start()检查您是否已在脚本顶部启动了会话,以便您可以访问$_SESSION['Username']。这是你echo $sql时看到的内容吗?
      

    更新订单SET状态=&#39;成功&#39;状态=&#39;不完整&#39; AND用户名=&#39;&#39; ORDER BY OrderID DESC LIMIT 1;

  2. 您在此行if ($conn->query($sql) === TRUE) {使用了严格的相等检查。我怀疑$conn->query($sql)是否会产生布尔值,因此可能永远不会达到该块。请改用:

      

    if($ conn-&gt; query($ sql)== TRUE){

    或简单地说:

      

    if($ conn-&gt; query($ sql)){

  3. 检查这些,看看问题是否消失!

答案 2 :(得分:0)

  

Order By是必需的,因为它会获取最高值   OrderID列,因此是该用户的最新列。

Order ByLimit不太可能在UPDATE查询中使用。 它用作子查询,与您使用它的方式不同。

相反,您可以使用:

UPDATE orders 
SET Status = 'Success'
WHERE Status = 'Incomplete' 
AND Username = '{$_SESSION['Username']}' 
AND OrderID = ( SELECT MAX(OrderID) FROM orders WHERE Username = '{$_SESSION['Username']}' ) ;

如果您的目标是更新特定用户名的最新记录。

答案 3 :(得分:0)

你有什么收获?运行脚本后它会更新吗? 这样做:

if(mail($to, $subject, $message, $headers)){
    redirect to the page
}else{
    echo 'Mail Error';
}

此后你的输出是什么?

答案 4 :(得分:0)

mail()函数通常使用在localhost上运行的SMTP服务器发送消息。您是否检查过确定该主机上确实存在SMTP服务器?如果是这样,您可能需要检查SMTP服务器的日志,这些内容可以说明服务器尝试提供消息时发生的消息。