【问题标题】:HTML Form with Sendemail带有 Sendemail 的 HTML 表单
【发布时间】:2017-07-29 04:23:36
【问题描述】:

我不知道问题出在哪里! mail() 运行良好(我已经用一个简单的 php 文件对其进行了测试)但是我的表单没有发送任何电子邮件!

HTML

  <section id="contact">
    <div id="google-map" class="wow fadeIn" data-latitude="35.7777622" data-longitude="10.8285004" data-wow-duration="1000ms" data-wow-delay="400ms"></div>
    <div id="contact-us" class="parallax">
      <div class="container">
        <div class="row">
          <div class="heading text-center col-sm-8 col-sm-offset-2 wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
            <h2>Contact</h2>
            <p>Send a message</p>
          </div>
        </div>
        <div class="contact-form wow fadeIn" data-wow-duration="1000ms" data-wow-delay="600ms">
          <div class="row">
            <div class="col-sm-6">
              <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="text" name="name" class="form-control" placeholder="Name" required="required">
                    </div>
                  </div>
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="email" name="email" class="form-control" placeholder="Email" required="required">
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <input type="text" name="subject" class="form-control" placeholder="Sub" required="required">
                </div>
                <div class="form-group">
                  <textarea name="message" id="message" class="form-control" rows="4" placeholder="Type your message" required="required"></textarea>
                </div>                        
                <div class="form-group">
                  <button type="submit" class="btn-submit">Send</button>
                </div>
              </form>   
            </div>
            <div class="col-sm-6">                           
            </div>
          </div>
        </div>
      </div>
    </div>        
  </section><!--/#contact-->

main.js

// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        url: $(this).attr('action'),
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Progress...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">Thanks for your message</p>').delay(3000).fadeOut();
    });
});

sendemail.php

<?php
$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to         = 'MyEmail@RemovedFor.privacy';

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

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

die;

您能帮我解决问题吗?当我在 sendemail.php 文件中添加一个简单的邮件('MyEmail@RemovedFor.privacy', 'My Subject', 'message')时,每次提交表单时,我都会收到一封电子邮件!但是我从来没有收到过邮件($to, $subject, $message, $headers);

非常感谢

【问题讨论】:

  • 不要使用错误抑制运算符 (@),因为它隐藏了可能有助于调试代码的错误消息。您还应该始终编写代码,以免生成任何 PHP 错误,包括通知。

标签: javascript php html email


【解决方案1】:

您正在根据用户的输入来欺骗 From 标头。不要这样做。

电子邮件的 From 标头必须准确地代表电子邮件的发件人 - 如果您在此标头中插入另一个值,许多邮件服务器将拒绝您的邮件或将其标记为垃圾邮件,因为生成的邮件将失败@ 987654321@ 和/或 DMARC 检查。

使用准确表示消息来源的 From 标头。例如,如果您的网站是 example.com,请将 From 标头设置为 From: webmaster@example.com。在邮件正文或Reply-To 标头中包含用户设置的电子邮件地址和名称。

【讨论】:

  • 非常感谢,这正在工作!现在我收到了电子邮件,但不幸的是,我收到了空消息和空主题(尽管我确信我已经添加了一个)。有什么想法吗?
【解决方案2】:

我认为 Headers 需要是一个字符串。

$headers  = '';
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$headers .= "From: {$name} <{$from}>\r\n";
$headers .= "Reply-To: <{$from}>\r\n";
$headers .= "Subject: {$subject}\r\n";
$headers .= "X-Mailer: PHP/".phpversion() . "\r\n";

http://php.net/manual/en/function.mail.php

您还应该过滤 $_POST

http://php.net/manual/en/function.filter-input.php

我认为您还需要通过ajax请求发送数据。

$.ajax({
  url: $(this).attr('action'),
  type: "POST",
  data: $(this).serialize(),

【讨论】:

  • 非常感谢!但不幸的是我收到了电子邮件但没有电子邮件,我尝试了你的ajax请求但它仍然是一样的!
猜你喜欢
  • 2012-06-24
  • 2017-01-04
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多