繁体   English   中英

PHP表单无法正常工作-无法接收电子邮件

[英]PHP Form Not Working – Not Receiving Emails

我刚开始为一家新公司工作,以前的员工使用PHP开发了他们的网站。 我不确定他的正确/错误。 我知道很多HTML和CSS,可以对PHP有所了解,但了解不多。 但我想在W3学校学习:)

我的网站上有一个联系表,但是,每当我单击“提交”时,尽管确实表示已提交,但我的电子邮件地址都没有收到任何信息。

预先感谢您的帮助!

下面是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <title>Anchor Technology | Services</title>
    <?php include('includes/head.php'); ?>
    <style type="text/css">#maintext .error h2 {color: red;</style>
</head>
<body>
<div id="maincontainer">
<?php include('includes/header.php'); ?>
<?php include('includes/navigation.php'); ?>
    <div class="shadow">
        <div id="maintext">
            <h2>Help!</h2>
        <!--Form options start here-->
        <!--Small Form Here-->
            <h2><strong>Existing Client Form</strong></h2>
            <?php
                error_reporting(E_ERROR | E_WARNING | E_PARSE);
                $form_block = "
                <p>Required fileds are marked with an asterick (*)        </p>
                <form action=\"$_SERVER[php_self]\"method=\"POST\">
                <P>*Company Name:</p>
                    <input size=40 name=\"name\" value=\"$_POST[name]\"><br />    <br />
                <p>*Contact Name:</p>
                    <input size=40 name=\"ctname\" value=\"$_POST[ctname]\"><br /><br />    
                <P>*Request Title:</p>
                    <input size=40 name=\"title\" value=\"$_POST[title]\"><br /><br />
                <P>Description:</p>
                  <textarea cols=\"60\"rows=\"10\"name=\"description\">$_POST[description]</textarea><br /><br />
                <P>Computer Name:</p>
                    <input size=20 name=\"cpname\" value=\"$_POST[cpname]\"><br /><br />
                <p>User Name:</p>
                    <input size=40 name=\"uname\" value=\"$_POST[uname]\"><br /><br />  
                <P>Priority Level</p>
                    <select name=\"level\">
                        <option value=\"High\">High</option>
                        <option value=\"Medium\">Medium</option>
                        <option value-\"Low\" selected=\"default\">Low</option>
                    </select><br /><br />   
                <input type=\"hidden\" name=\"op\" value=\"ds\">        
                <input type=\"submit\" name=\"submit\" value=\"Submit\">    
            </form>";
            if ($_POST[op] != "ds") {
                //need to see form
                echo "$form_block";
                //check required fields
            } else if ($_POST[op] == "ds") {
                If (($_POST[name] == "") || ($_POST[ctname] == "") || ($_POST[title] == "")) {
                    $msg_err = "<div class=\"error\"<h2>    <strong>Please fill in all required fields</strong></h2></div>";
                    $send = "no";
                }
                if ($send != "no") {
                    //it's ok to send
                    // create msg variable containing the message that will be sent to the email recipient  
                    $msg .= "Company Name: $_POST[name]\n ";

                    // continue to concatenate the variable adding new pieces of information submitted

                    $msg .= "Company Name: $_POST[name]\n ";
                    $msg .= "Contact Name: $_POST[ctname]\n ";
                    $msg .= "Request Title: $_POST[title]\n ";              
                    $msg .="Description:$_POST[description]\n";             
                    $msg .= "Computer Name: $_POST[cpname]\n ";                 
                    $msg .= "User Name: $_POST[uname]\n ";              
                    $msg .= "Priority Level: $_POST[level]\n ";             

                    //Create variables to be used in the php Mail Function
                    $recipient = "help@anchortechnology.com";
                    $subject = "Help request from $_POST[name]";
                    $mailheaders = "From: $_POST[ctname] \n";
                    $mailheaders .= "Reply-To: $_POST[ctname]";

                    //send mail form
                    //Use mail Function to Send
                    mail($recipient, $subject, $msg, $mailheaders);

                    // show confirmation message
                    // echo statements will be shown when script executes

                    echo "<p>Thank you, $_POST[name]!</p>";
                    echo "<p>Your message was sent!</p>";
                    echo "<a href=\"../index.php\">Return Home</a>";
                } else if ($send == "no") {
                    //print error messages
                    echo "$msg_err";
                    echo "$form_block";
                }
            }
            ?>
            <br /><br />
        </div>
    </div>      
    <div class="shadow">        
        <div id="footer">
            <?php include('includes/footer.php'); ?>
        </div>
    </div>
</div>                  
</body>
</html>

首先,缩小问题范围。 您可以从PHP发送任何邮件吗? 尝试使用简单的mail()测试脚本来发送简单的消息。

如果可行,则检查mail($recipient, $subject, $msg, $mailheaders); 通过在调用邮件之前回显或var_dump()变量来替换部分代码。

一个问题是, PHP mail()根据成功返回布尔值true或false,但是所发布的脚本完全忽略了这一点,只是认为一切正常。 这不会导致电子邮件无法发送,但是即使mail()函数完全告诉您它无法正常工作,它也会导致脚本报告其已正常发送。 遗憾的是,文档本身从未解决过此问题,所有示例都显示了邮件,而未尝试检查成功。

部分原因是因为mail()不会提供任何有用的错误消息,所以它通常只起作用或不起作用-并且如果函数返回true,则并不意味着它真正起作用。 对于“关键任务”电子邮件,请不要单独使用mail()来确保您收到重要消息或捕获重要数据。

但是,这是找出问题所在的开始。 首先确保适当的PHP mail()功能,然后从那里开始。

好吧,我从调查此事的朋友那里发现了主要问题。

我们正在使用IX Webhosting,并有一个Linux和一个Microsoft服务器,每个服务器托管几个站点。 PHP站点托管在Microsoft机器上,据我所知,它不是设置为运行PHP,而是Linux。

切换过来,没有更多问题。

感谢你的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM