Невозможно отправить письмо в PHP через HTML-форму - PullRequest
0 голосов
/ 18 декабря 2018

Я спроектировал и разработал один веб-сайт, на котором у меня есть одна контактная форма.Я хотел отправить запрос по электронной почте через контактную форму.Но я получаю следующую ошибку в консоли.Я пробовал на локальной системе, а также на сервере.

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 голосов
/ 18 декабря 2018

XMLHttpRequest не поддерживает file схему.

Вы можете попробовать это:

Решение 1 : использовать http / https вместо локального файла.
Я бы никогда не использовал файловый протокол для файлов на стороне сервера, если вам нужно локально протестировать файлы .php, лучше использовать localhost (например, XAMPP) и протестировать ваш код.

Решение 2 (не пропустите решение 1): попробуйте это, если решение 1 не сработало, но, пожалуйста, не используйте протокол file (в противном случае он все равно не будет работать).

Попробуйте добавить следующий заголовок к ответу HTTP:

Access-Control-Allow-Origin: *

Приведенный выше заголовок позволит вашим сценариям читать ответ независимо от источника.

Примечание: Не используйте Access-Control-Allow-Origin: * в производственном коде, в противном случае вы подвергаете свой сайт уязвимостям безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...