【问题标题】:when sending php email it is blank发送 php 电子邮件时它是空白的
【发布时间】:2016-12-23 02:32:55
【问题描述】:

当我使用联系表格发送电子邮件时,电子邮件本身是空白的(没有主题,也没有消息或任何东西!)电子邮件完美发送到我的 gmail,但如上所述,没有主题等。

JS

$('#contactform').submit(function(){
    var action = $(this).attr('action');
    $("#message").slideUp(250,function() {
        $('#message').hide();
        $('#submit')
            .after('<img src="img/assets/cbp-loading.gif" class="loader" />')
            .attr('disabled','disabled');
        $.post(action, {
            name: $('#name').val(),
            email: $('#email').val(),
            subject: $('#subject').val(),
            comments: $('#comments').val(),
        },
            function(data){
                document.getElementById('message').innerHTML = data;
                $('#message').slideDown(250);
                $('#contactform img.loader').fadeOut('slow',function(){$(this).remove()});
                $('#submit').removeAttr('disabled');
                if(data.match('success') != null) $('#contactform').slideUp(850, 'easeInOutExpo');
            }
        );
    });

PHP

<?php
$name = isset($_POST['name']) ? $_POST['name'] : '';
$email = isset($_POST['_replyto']) ? $_POST['_replyto'] : '';
$subject = isset($_POST['_subject']) ? $_POST['_subject'] : '';
$comments = isset($_POST['comments']) ? $_POST['comments'] : '';

$to = 'WhereTheInfoWillBeSent@gmail.com';
$subject = $subject;
$comments = "From: " . $name . ", " . $email . "\r\n \r\n" . "comments: " . $comments;
if (mail($to, $email, $subject, $comments)) {
    echo "Thanks for contacting us, we will get back to you soon!";
} else {
    echo "Sorry, there was an error sending the email. Please ensure you have filled out the form correctly and try again!";
}

HTML

form method="post" action="contact-form.php" name="contactform" id="contactform">
                            <fieldset>
                                    <input name="name" type="text" id="name" placeholder="Name"/> 
                                    <input name="email" type="text" id="email" placeholder="Email"/>  
                                    <input name="subject" type="text" id="subject" placeholder="Subject"/> 
                            </fieldset>
                            <fieldset> 
                                    <textarea name="comments" cols="40" rows="3" id="comments" placeholder="Message"></textarea>
                            </fieldset>
                            <input type="submit" class="submit" id="submit" value="Send Message" />
                        </form>
                    </div>  

【问题讨论】:

  • 所以开始挖掘自己:首先打开浏览器开发控制台并检查 ajax 帖子是否实际发送了预期值。如果是这样,那么接下来将$_POST 超全局转储到服务器端的日志文件中,并检查它是否接收到这些值。
  • 检查您的 SESSION... 是否已开始?检查$name=isset($_POST['name']) ? $_POST['name'] : '';$email = isset($_POST['_replyto']) ? $_POST['_replyto'] : '';$subject = isset($_POST['_subject']) ? $_POST['_subject'] : '';$comments = isset($_POST['comments']) ? $_POST['comments'] : ''; 的方式实际上是让它默默地“失败”。
  • 表单有效...我收到一封电子邮件...预计没有主题...或任何内容...所以很明显,当单击提交按钮时,它会触发发送电子邮件...
  • cmets 通过了吗?看起来像这样:$subject = isset($_POST['_subject']) ? $_POST['_subject'] : ''; 应该是这样的:$subject = isset($_POST['subject']) ? $_POST['subject'] : '';
  • 尝试var_dump($subject);var_dump($comments) 看看这些变量是否设置正确。

标签: javascript php


【解决方案1】:

这不是很明显吗,您发布的数据与您的预期不同。

{
     name: $('#name').val(),
     email: $('#email').val(),
     subject: $('#subject').val(),
     comments: $('#comments').val(),
}

这意味着只有这些字段在$_POST 中可用。 现在要么在 JS 中更改键名,要么在 PHP 中更改它。

$email = isset($_POST['email']) ? $_POST['email'] : '';
$subject = isset($_POST['subject']) ? $_POST['subject'] : '';

【讨论】:

  • 现在电子邮件工作正常,问题是主题,如果我在消息中输入文本,则不会通过电子邮件发送
  • 无论您在 JS 中作为 data 对象传递的什么键,只有它们在 $_POST 中可用。
【解决方案2】:

除了@anwerjunaid 说的,你需要改变你的PHP的一行的顺序:

这个:

    if (mail($to, $email, $subject, $comments)) {
    echo "Thanks for contacting us, we will get back to you soon!";
} else {
    echo "Sorry, there was an error sending the email. Please ensure you have filled out the form correctly and try again!";
}

应该是:

if (mail($to, $subject, $comments)) {
    echo "Thanks for contacting us, we will get back to you soon!";
} else {
    echo "Sorry, there was an error sending the email. Please ensure you have filled out the form correctly and try again!";
}

订单需要是收件人、邮件主题和邮件内容。

如果您想包含发件人或回复,请添加如下内容:

$headers = 'From: WhereTheInfoWillBeSent@gmail.com' . "\r\n" .
'Reply-To: WhereTheInfoWillBeSent@gmail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

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

【讨论】: