PHP 联系表单的配置问题

Posted

技术标签:

【中文标题】PHP 联系表单的配置问题【英文标题】:Configuration issue with PHP contact form 【发布时间】:2016-08-28 05:12:29 【问题描述】:

我在 *** 上看到了许多与我的问题相似的问题,但我想我还没有找到正确的解决方案。

我遇到的问题与接收电子邮件功能有关 - 基本上是网站的 联系我们 部分,用户可以在其中填写基于html 的表格并按send message 和此消息将发送到我的电子邮件。

我使用 XAMPP 进行开发,并在 localhost 上运行 Apache 服务器和 Mercury。即使验证显示成功 - 电子邮件也无法通过。

    我尝试将method="post" 添加到HTML 部分,但发现type: "POST" 已经包含在内。 仔细检查 Mercury 使用的端口,并将其与 php.ini 中提到的端口进行比较,两者都设置为 25。 我还尝试部署到 Bitbucket pages 和 Azure 以从本地主机迁移到实时托管。

我已经仔细阅读了这个非常详细的post。将网站上传到实时托管的想法来自这篇文章。

<?php
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);


if( isset($name) && isset($email) ) 

    // Avoid Email Injection and Mail Form Script Hijacking
    $pattern = "/(content-type|bcc:|cc:|to:)/i";
    if( preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message) ) 
        exit;
    

    $to = "myemail@gmail.com";
    $sub = "$name from Cv";
    // HTML Elements for Email Body
    $body = <<<EOD
    <strong>Name:</strong> $name <br>
    <strong>Email:</strong> <a href="mailto:$email?subject=feedback" "email me">$email</a> <br> <br>
    <strong>Message:</strong> $message <br>
EOD;

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

    mail($to, $sub, $body, $headers);


?>

$("#contact-form-1").submit(function(e) 
  e.preventDefault();
  var success = $(this).find('.email-success'),
      failed = $(this).find('.email-failed'),
      loader = $(this).find('.email-loading'),
      postUrl = $(this).attr('action');

  success.fadeOut(100); failed.fadeOut(100); loader.fadeOut(100);

  var data = 
    name: $(this).find('.contact-name').val(),
    email: $(this).find('.contact-email').val(),
    message: $(this).find('.contact-message').val()
  ;

  if ( isValidEmail(data['email']) && (data['message'].length > 1) && (data['name'].length > 1) ) 
    $.ajax(
      type: "POST",
      url: postUrl,
      data: data,
      beforeSend: function() 
        loader.fadeIn(500);
      ,
      success: function(data) 
        loader.fadeOut(500);
        failed.fadeOut(500);
        success.delay(500).fadeIn(500);
      ,
      error: function(xhr)  // if error occured
        loader.fadeOut(500);
        success.fadeOut(500);
        failed.delay(500).fadeIn(500);
      ,
      complete: function() 
        loader.fadeOut(500);
      
    );
   else 
    loader.fadeOut(500);
    failed.delay(500).fadeIn(500);
    success.fadeOut(500);
  

  return false;
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form id="contact-form-1" action="sendmail.php" method="POST">
  
  <input class="contact-name form-control" type="text" name="name" placeholder="FULL NAME">
  <input class="contact-email form-control" type="text" name="email" placeholder="EMAIL">
  <textarea class="contact-message form-control" name="message" placeholder="MESSAGE" rows="5"></textarea>
  <button class="btn">SEND MESSAGE</button>

</form>

注意:此代码不是我自己编写的,因为它是由模板创建者提供的。我已经联系了模板创建者并面临绝对糟糕的支持。这是我在这里发帖的主要原因。

【问题讨论】:

好吧,你不是在检查邮件是否发送成功, @Epodax 我添加了验证。请查看更新后的帖子。 你有什么错误信息吗? @D14n4 没有错误消息。我收到XHR finished loading: POST jquery-1.11.3.js:9664 表示我的电子邮件已“成功”发送,但根本没有发送任何内容。 您是否在 XAMPP 中安装了邮件服务器?默认情况下,php 使用 localhost 作为 smtp 服务器。 【参考方案1】:

在进行更多研究和四处询问时,我发现 this 非常有用的答案最终修复了我的本地 XAMPP 配置。所以代码本身没有问题,但我的配置是问题所在。

重要提示:尽量按照步骤进行操作,简单的; 缺失会对最终结果产生很大影响。因此,请仔细检查每一步是否有问题。

还发现另一个非常有见地和有趣的阅读post。

【讨论】:

以上是关于PHP 联系表单的配置问题的主要内容,如果未能解决你的问题,请参考以下文章

Apache/PHP/HTML - Textarea,提交包含换行符(输入键)的表单会产生 403?

Confluence 6 管理员联系表单的后台配置界面

Confluence 6 管理员联系表单的后台配置界面

Confluence 6 配置避免管理员联系表单垃圾

Confluence 6 配置避免管理员联系表单垃圾

联系表格问题,PHP/css