无法通过HTML表单以PHP发送电子邮件

时间:2018-12-18 15:50:26

标签: php html email

我设计和开发了一个网站,其中有一个联系表。我想通过联系表格发送查询电子邮件。但是我在控制台中遇到以下错误。我尝试在本地系统以及服务器上。

Access to XMLHttpRequest at 'file:///E:/clients/website/contact.php' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

这是我的HTML代码:

<form id="contactform" action="contact.php" name="contactform" method="post" class="form-validation" autocomplete="off">
                        <div class="row">
                            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                                <div class="single-input">
                                    <input type="text" placeholder="First Name*" name="Fname" id="Fname">
                                </div> <!-- /.single-input -->
                            </div>
                            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                                <div class="single-input">
                                    <input type="text" placeholder="Last Name*" name="Lname" id="Lname">
                                </div> <!-- /.single-input -->
                            </div>
                            <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
                                <div class="single-input">
                                    <input type="email" placeholder="Your Email*" name="email" id="email">
                                </div> <!-- /.single-input -->
                            </div>
                        </div> <!-- /.row -->
                        <div class="single-input">
                            <input type="text" placeholder="Subject" name="sub" id="subject">
                        </div> <!-- /.single-input -->
                        <textarea placeholder="Write Message" name="message" id="message"></textarea>


                        <button type="submit" value="SEND" id="submit" class="tran3s p-color-bg">Send Message</button>
                    </form>

这是contact.php

<?php
if(!$_POST) exit;

// Email address verification, do not edit.
function isEmail($email) {
    return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(com|coop|cr|cs)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$Fname     = $_POST['Fname'];
$Lname     = $_POST['Lname'];
$email    = $_POST['email'];
$subject  = $_POST['subject'];
$message = $_POST['message'];

if(get_magic_quotes_gpc()) {
    $message = stripslashes($message);
}

$address = "sales@abc.com";

$e_subject = 'You\'ve been contacted by ' . $Fname . '.';

$e_body = "You have been contacted by $Fname with regards to $subject, their additional message is as follows." . PHP_EOL . PHP_EOL;
$e_content = "\"$message\"" . PHP_EOL . PHP_EOL;
$e_reply = "You can contact $Fname via email, $email";

$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if(mail($address, $e_subject, $msg, $headers)) {

    // Email has sent successfully, echo a success page.

    echo "<fieldset>";
    echo "<div id='success_page'>";
    echo "<h1>Email Sent Successfully.</h1>";
    echo "<p>Thank you <strong>$Fname</strong>, your message has been submitted to us.</p>";
    echo "</div>";
    echo "</fieldset>";

} else {

    echo 'ERROR!';

}

1 个答案:

答案 0 :(得分:0)

XMLHttpRequest不支持file方案。

您可以尝试以下方法:

解决方案1 ​​:使用http / https代替本地文件。
我永远不会对服务器端文件使用文件协议,如果您需要在本地测试.php文件,最好使用本地主机(例如XAMPP)并测试代码。

解决方案2 (不要跳过解决方案1):如果解决方案1无效,请尝试执行此操作,但是请不要使用file协议(否则它将不会)还是要工作)。

尝试将以下标头添加到HTTP响应:

Access-Control-Allow-Origin: *

上面的标头将允许您的脚本读取响应,而不管其来源为何。

注意:请勿在生产代码上使用Access-Control-Allow-Origin: *,否则会使网站面临安全漏洞。