【问题标题】:PHP contact form messages not receivingPHP联系表单消息未收到
【发布时间】:2013-09-04 10:46:02
【问题描述】:

您好,我的网站上有简单的电子邮件联系表,该表单可以正常工作,包括成功发送消息,但是,我没有收到发送到指定网络邮件服务器的电子邮件。我正在运行最新的 PHP。是否某些 Web 服务器缓存邮件,或者此代码中是否存在一些错误,我没有看到。

<?php

$EmailFrom = "email@mydomain.com";
$EmailTo = "email@mydomain.com";
$Subject = "Contacting Me";
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=index\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

<div id="contact-area">

            <form method="post" action="contactengine.php">
                <label for="Name">Name:</label>
                <input type="text" name="Name" id="Name" />

                <label for="Email">Email:</label>
                <input type="text" name="Email" id="Email" />

                <label for="Message">Thought:</label><br />
                <textarea name="Message" rows="20" cols="20" id="Message"></textarea>

                <input type="submit" name="submit" value="Transmit" class="submit-button" />
            </form>

            <div style="clear: both;"></div></div>

【问题讨论】:

  • 您可能应该花一点时间来完善验证。你知道,让它更有效一点......

标签: php html css forms contact


【解决方案1】:

发送邮件比只运行 mail() 命令更复杂,您需要查看电子邮件配置的php.ini 设置并从那里继续进行故障排除。

如果您在未配置 mail() 函数运行的主机上运行,​​您可以尝试使用以下开源邮件程序:

PHPMailer

您可以尝试使用提供的示例并从您家中连接的本地开发堆栈(XAMPP、MAMP、WAMP)运行,如果配置正确,您应该能够接收邮件。

如果OK,你可以在服务器上试一下,应该也可以发送,如果不行,请检查发送邮件的出端口是否被阻塞。

作为使用 PHPMailer 的替代方案,您可以寻找一个简单的 PHP 邮件程序并尝试一下。

【讨论】:

    【解决方案2】:

    不要使用print "&lt;meta http-equiv=\"refresh\"...,因为在测试期间,它会在发送同一电子邮件的多个副本时导致死循环。

    请改用header('Location: ...');exit;

    另外,您所有的&lt;meta http-equiv=\"refresh\" 都产生了解析错误。

    工作示例(已成功接收电子邮件测试):

    <?php
    
    $EmailFrom = "email@mydomain.com";
    $EmailTo = "email@mydomain.com";
    $Subject = "Contacting Me";
    $Name = Trim(stripslashes($_POST['Name'])); 
    $Tel = Trim(stripslashes($_POST['Tel'])); 
    $Email = Trim(stripslashes($_POST['Email'])); 
    $Message = Trim(stripslashes($_POST['Message'])); 
    
    // validation
    $validationOK=true;
    if (!$validationOK) {
    
    // echo "error 1";
    
    header('Location: error.htm');
    
    exit;
    }
    
    // prepare email body text
    $Body = "";
    $Body .= "Name: ";
    $Body .= $Name;
    $Body .= "\n";
    $Body .= "Tel: ";
    $Body .= $Tel;
    $Body .= "\n";
    $Body .= "Email: ";
    $Body .= $Email;
    $Body .= "\n";
    $Body .= "Message: ";
    $Body .= $Message;
    $Body .= "\n";
    
    // send email 
    $success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
    
    // redirect to success page 
    if ($success){
    
    header('Location: http://www.example.com/');
    
    exit;
    
    }
    else{
    
    header('Location: error.htm');
    
    exit;
    
    }
    ?>
    

    【讨论】:

    • 太好了,这很好用。谢谢!时间一到,我会接受这个答案。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多