PHP邮件表单:来自名称表示$ name@hostdomain.com而不是用户提供的电子邮件和名称

时间:2013-12-18 22:57:14

标签: php forms email email-headers

我正在尝试为我的网站设置一个简单的联系表单。表单的最终目标是让用户提交他们的信息并让服务器处理并发送电子邮件,就像它直接来自用户一样。换句话说,如果John Doe的电子邮件地址是johndoe@example.com,则填写表单,然后电子邮件就像John Doe从他的电子邮件地址johndoe@example.com发送的那样。对我来说令人难以置信的是,我认为我的服务器可能没有授权代表用户发送;但是,我试图摆脱的较旧的PHP表单执行得很好。

目前,这是我的邮件处理表格PHP:

<?php 
if (($_SERVER['REQUEST_METHOD'] == 'POST') && (!empty($_POST['action']))):

if (isset($_POST['myname'])) { $myname = $_POST['myname']; }
if (isset($_POST['myemail'])) {
        $myemail = filter_var($_POST['myemail'], FILTER_VALIDATE_EMAIL ); 
}
if (isset($_POST['mysubject'])) { $mysubject = $_POST['mysubject']; }
if (isset($_POST['mycomments'])) {
        $mycomments = filter_var($_POST['mycomments'], FILTER_SANITIZE_STRING ); 
}
if (isset($_POST['reference'])) { $reference = $_POST['reference']; }
if (isset($_POST['requesttype'])) { $requesttype = $_POST['requesttype']; }

$formerrors = false;

if ($myname === '') :
    $err_myname = '<div class="error">Sorry, your name is a required field</div>';
    $formerrors = true;
endif; // input field empty

if ($mysubject === '') :
    $err_myname = '<div class="error">Please enter a subject for your message.</div>';
    $formerrors = true;
endif; // input field empty

if ( !(preg_match('/[A-Za-z]+, [A-Za-z]+/', $myname)) ) :
    $err_patternmatch = '<div class="error">Sorry, the name must be in the format: Last, First</div>';
    $formerrors = true;
endif; // pattern doesn't match

if (!($formerrors)) :
    $to     =   'example@example.com';
    $subject    =   "$mysubject";
    $message    =   "\nName: $myname\n\nEmail: $myemail\n\nSubject: $mysubject\n\nComments: $mycomments\n";
    $from       =   $myname.'<'.$myemail.'>';
    $headers    =   'From: '.$from."\r\n".
                    'Reply-To: '.$myemail."\r\n";

    if (mail($to, $subject, $message, $headers)):
        $msg = "Thanks for filling out our form";
    else:
        $msg = "Problem sending the message";
    endif; // mail form data

endif; // check for form errors

endif; //form submitted
?>

目前回复工作正常,但通过表单收到的电子邮件表明LastName@hostdomain.com。感谢您的贡献。

0 个答案:

没有答案