php - 联系表单中的 From 字段和 mail() 函数存在问题

标签 php jquery html ajax email-headers

我有一个包含 3 个字段和一个文本区域的联系表单...
我使用 jQuery 来验证它,然后使用 php 发送电子邮件。

此联系表单工作正常,但当我收到电子邮件时,发件人字段不正确。我希望“发件人”字段显示在联系表单的“姓名”字段中键入的文本。现在我得到一个像这样的 From 字段:<nameOfMyServerAdmin@serverUrl.com>

例如,如果用户在姓名字段中输入“Matthew”,我希望“Matthew”这个词出现在“发件人”字段中。

这是我的代码(XHTML、jQuery、PHP):

<div id="contact">
    <h3 id="formHeader">Send Us a Message!</h3>
    <form id="contactForm" method="post" action="">
        <div id="risposta"></div> <!-- End Risposta Div -->
        <span>Name:</span>
        <input type="text" id="formName" value="" /><br />
        <span>E-mail:</span>
        <input type="text" id="formEmail" value="" /><br />
        <span>Subject:</span>
        <input type="text" id="formSubject" value="" /><br />
        <span>Message:</span>
        <textarea id="formMessage" rows="9" cols="20"></textarea><br />
        <input type="submit" id="formSend" value="Send" />
    </form>
</div>


<script type="text/javascript">
     $(document).ready(function(){
        $("#formSend").click(function(){

            var valid = '';
            var nome = $("#formName").val();
            var mail = $("#formEmail").val();
            var oggetto = $("#formSubject").val();
            var messaggio = $("#formMessage").val();

            if (nome.length<1) {
                valid += '<span>Name field empty.</span><br />';
            }
            if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
                valid += '<span>Email not valid or empty field.</span><br />';
            }
            if (oggetto.length<1) {
                valid += '<span>Subject field empty.</span><br />';
            }

            if (valid!='') {
                $("#risposta").fadeIn("slow");
                $("#risposta").html("<span><b>Error:</b></span><br />"+valid);
                $("#risposta").css("background-color","#ffc0c0");
            }
            else {
                var datastr ='nome=' + nome + '&mail=' + mail + '&oggetto=' + oggetto + '&messaggio=' + encodeURIComponent(messaggio);
                $("#risposta").css("display", "block");
                $("#risposta").css("background-color","#FFFFA0");
                $("#risposta").html("<span>Sending message...</span>");
                $("#risposta").fadeIn("slow");
                setTimeout("send('"+datastr+"')",2000);
            }
            return false;
        });
    });
    function send(datastr){
        $.ajax({    
            type: "POST",
            url: "contactForm.php",
            data: datastr,
            cache: false,
            success: function(html) {
            $("#risposta").fadeIn("slow");
            $("#risposta").html('<span>Message successfully sent.</span>');
            $("#risposta").css("background-color","#e1ffc0");
            setTimeout('$("#risposta").fadeOut("slow")',2000);
            }
        });
    }
    </script>

<?php
$mail = $_POST['mail'];
$nome = $_POST['nome'];
$oggetto = $_POST['oggetto'];
$text = $_POST['messaggio'];
$ip = $_SERVER['REMOTE_ADDR'];
$to = "support@matthewlabs.com";

$message = $text."<br /><br />IP: ".$ip."<br />";
$headers = "From: $nome \n";
$headers .= "Reply-To: $mail \n";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=UTF-8 \n";

mail($to, $oggetto, $message, $headers);
?>

最佳答案

您应该在“发件人:”标题中使用电子邮件地址。试试这个:

$headers = "From: $nome <$mail>\r\n";
$headers .= "Reply-To: $mail\r\n";

关于php - 联系表单中的 From 字段和 mail() 函数存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548407/

相关文章:

php - 自动递增一串数字和字母

jquery - Css 选择器 - 选择所有同级直到某个同级

html - 如何撤消 bulma 嵌套元素中的 is_mobile?

php - 将js值分配给php变量时出现问题

php - 多个 MYSQL 查询与多个 php foreach 循环

javascript - 如何使用 JS 在页面出现之前、刷新之后显示元素

javascript - if 语句检查 jquery 中的 prop ("disabled") 不起作用

javascript - 将单选按钮转换为星级

javascript - 提示数字或字符仅在文本框中输入值?在 AngularJS 中如何?

php - 检测 MySQL 数据库中更新的行是否已更改