PHP发送电子邮件文件不起作用 - Going Crazy - 无法找到错误

时间:2015-11-12 02:14:02

标签: php html post

好的我是php的新手,尝试制作一个简单的发送电子邮件表单,对于我的生活,我无法找到我做错了什么!我得到的唯一错误是该属性未定义。但是我使用Postman来测试我的PHP文件并且它工作正常https://www.getpostman.com/collections/9b8a8d084782d1184a10,但是当我从网站dabllc.net运行它时我什么都没得到

这是sendemail.php

<?php
header('Content-type: application/json');
$status_good = array(
    'type'=>'success',
    'message'=>'Thank you for contact us. As early as possible  we will contact you '
);
$status_bad = array(
    'type'=>'$#!7',
    'message'=>'Thank you but not thanks. '
);

$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 

$email_from = $email;
$email_to = 'my@email.com';//replace with your email

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
error_log($body . " " . $email_to);

$success = mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
if(!$success){
    echo json_encode($status_bad);
}
else{
    echo json_encode($status_good);
}

die;

,这是表格

<section id="contact-us">
    <div class="container">
        <div class="center">        
            <h2>Drop Your Message</h2>
            <p class="lead">Feel Free to contact us with any questions, and we will respond as fast as we can.</p>
        </div> 
        <div class="row contact-wrap"> 
            <div class="status alert alert-success" style="display: none"></div>
            <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
                <div class="col-sm-5 col-sm-offset-1">
                    <div class="form-group">
                        <label>Name *</label>
                        <input type="text" name="name" class="form-control" required="required">
                    </div>
                    <div class="form-group">
                        <label>Email *</label>
                        <input type="email" name="email" class="form-control" required="required">
                    </div>
                    <div class="form-group">
                        <label>Phone</label>
                        <input type="number" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Company Name</label>
                        <input type="text" class="form-control">
                    </div>                        
                </div>
                <div class="col-sm-5">
                    <div class="form-group">
                        <label>Subject *</label>
                        <input type="text" name="subject" class="form-control" required="required">
                    </div>
                    <div class="form-group">
                        <label>Message *</label>
                        <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
                    </div>                        
                    <div class="form-group">
                        <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
                    </div>
                </div>
            </form> 
        </div><!--/.row-->
    </div><!--/.container-->
</section><!--/#contact-page-->

错误 - &gt; http://pastebin.com/N6BB0nHj

Java脚本

// 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> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
    });
});

请我必须遗漏一些小事,感谢任何帮助。我不想要重写这一切。

3 个答案:

答案 0 :(得分:0)

您的错误在于您发送邮件的方式。

由于你是通过ajax和jQuery实现的,所以你在HTML中放下的任何内容都不会在这里发挥作用。

这是你的代码:

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> Email is sending...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
        });

你有一个监听器在那里等待提交表单。您主动禁用表单本身继续提交以在其位置放置ajax调用。

但是你的ajax调用没有声明它应该是一个post请求,也不提交输入的值。

所以这里是你如何在jQuery中发布ajax调用:

$.ajax({
  method: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" }
})
  .done(function( msg ) {
    alert( "Data Saved: " + msg );
  });

也许您想在此处详细了解:http://api.jquery.com/jquery.ajax/

你所要做的就是设置&#34;发布&#34;作为调用方法并收集表单字段值以随其发送

答案 1 :(得分:0)

您的javascript代码不会向sendemail.php发送任何数据。要解决此问题,请使用以下代码:

// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        type: 'POST',
        url: $(this).attr('action'),
        data: ({
            name: $( '#name' ).val(),
            email: $( '#email' ).val(),
            phone: $( '#phone' ).val(),
            company: $( '#company' ).val(),
            subject: $( '#subject' ).val(),
            message: $( '#message' ).val()
        }),
        dataType: 'json',    
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
    });
});

将此用于HTML:

<section id="contact-us">
    <div class="container">
        <div class="center">        
            <h2>Drop Your Message</h2>
            <p class="lead">Feel Free to contact us with any questions, and we will respond as fast as we can.</p>
        </div> 
        <div class="row contact-wrap"> 
            <div class="status alert alert-success" style="display: none"></div>
            <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
                <div class="col-sm-5 col-sm-offset-1">
                    <div class="form-group">
                        <label>Name *</label>
                        <input type="text" id="name" name="name" class="form-control" required="required">
                    </div>
                    <div class="form-group">
                        <label>Email *</label>
                        <input type="text" id="email" name="email" class="form-control" required="required">
                    </div>
                    <div class="form-group">
                        <label>Phone</label>
                        <input type="text" id="phone" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Company Name</label>
                        <input type="text" id="company" class="form-control">
                    </div>                        
                </div>
                <div class="col-sm-5">
                    <div class="form-group">
                        <label>Subject *</label>
                        <input type="text" id="subject" name="subject" class="form-control" required="required">
                    </div>
                    <div class="form-group">
                        <label>Message *</label>
                        <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
                    </div>                        
                    <div class="form-group">
                        <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
                    </div>
                </div>
            </form> 
        </div><!--/.row-->
    </div><!--/.container-->
</section><!--/#contact-page-->

答案 2 :(得分:-1)

你不需要指定mime类型吗?我认为$ header没有包含在你的mail()命令中。

刚刚注意到您的错误日志。通过POST传递变量是一个问题.... def a json / ajax error ...