Почтовый скрипт перестал работать после обновления до PHP 7 - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть почтовый скрипт, который перестал работать после обновления до PHP 7.

Но я понятия не имею, почему он перестал работать, я публикую в этот скрипт, используя ajax, поэтому я не вижу никаких ошибок PHP, простоошибка 500 в моей вкладке сети при публикации.

Это мой сценарий:

<?php
/* ==========================  Define variables ========================== */

#Your e-mail address
define("__TO__", "test@live.nl");

if ($_POST['contact-form'] == 'true') {
    #Message subject
    define("__SUBJECT__", "Contact aanvraag");
    $productpakket = 'Pakket';
}

if ($_POST['contact-form'] == 'false') {
    #Message subject
    define("__SUBJECT__", "Ketel/Informatie aanvraag");
    $productpakket = 'Product';
}

if ($_POST['offerte'] == 'true') {
    #Message subject
    define("__SUBJECT__", "Offerte aanvraag");
}

#Success message
define('__SUCCESS_MESSAGE__', "Uw bericht is verstuurd, bedankt!");

#Error message
define('__ERROR_MESSAGE__', "Error, uw bericht is niet verstuurd");

#Messege when one or more fields are empty
define('__MESSAGE_EMPTY_FILDS__', "Vult u alstublieft alle velden in");

/* ========================  End Define variables ======================== */

//Send mail function
function send_mail($to, $subject, $message, $headers) {
    if (@mail($to, $subject, $message, $headers)) {
        echo json_encode(array('info' => 'success', 'msg' => __SUCCESS_MESSAGE__));
    } else {
        echo json_encode(array('info' => 'error', 'msg' => __ERROR_MESSAGE__));
    }
}

//Check e-mail validation
function check_email($email) {
    if (!@eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
        return false;
    } else {
        return true;
    }
}

//Get post data
if (isset($_POST['name']) and isset($_POST['mail']) and isset($_POST['comment'])) {
    $hidden     = $_POST['hidden'];
    $name       = $_POST['name'];
    $mail       = $_POST['mail'];
    $website    = $_POST['website'];
    $comment    = $_POST['comment'];
    $over       = $_POST['over'];
    $adres      = $_POST['adres'];
    $woonplaats = $_POST['woonplaats'];
    $tel        = $_POST['telefoon'];
    $tijd       = $_POST['tijd'];
    $keteltype  = $_POST['ketel'];
    $offertevoor= $_POST['offertevoor'];
    $product    = $_POST['product'];
    $plaatsnaam = $_POST['plaatsnaam'];

    if ($name == '') {
        echo json_encode(array('info' => 'error', 'msg' => "U heeft geen naam ingevuld."));
        exit();
    } else if ($mail == '' or check_email($mail) == false) {
        echo json_encode(array('info' => 'error', 'msg' => "U heeft geen geldig email adres ingevoerd."));
        exit();
    } else if ($comment == '') {
        echo json_encode(array('info' => 'error', 'msg' => "U heeft geen bericht ingevuld."));
        exit();
    } else {
        //Send Mail

        if ($_POST['offerte'] != 'true') {
            if ($hidden == '') {
                $hidden_field = '';
            } else if ($hidden != '') {
                $hidden_field = '<tr style="height: 32px;">
                                  <th align="right" style="width:150px; padding-right:5px;">'.$productpakket.':</th>
                                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$hidden.'</td>
                                </tr>';
            }

            if ($over == '') {
                $over_field = '';
            } else if ($over != '') {
                $over_field = '<tr style="height: 32px;">
                                  <th align="right" style="width:150px; padding-right:5px;">Onderhouds contract:</th>
                                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$over.'</td>
                                </tr>';
            }

            $to      = __TO__;
            $subject = __SUBJECT__.' '.$name;
            $message = '
            <html>
            <head>
              <title>Mail from '.$name.'</title>
            </head>
            <body>
              <table style="width: 500px; font-family: arial; font-size: 14px;" border="1">
              '.$hidden_field.'
              '.$over_field.'
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Naam:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$name.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">E-mail:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$mail.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Telefoonnummer:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$website.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Plaatsnaam:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$plaatsnaam.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Bericht:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$comment.'</td>
                </tr>
              </table>
            </body>
            </html>
            ';
        } else {
            if ($hidden == '') {
                $hidden_field = '';
            } else if ($hidden != '') {
                $hidden_field = '<tr style="height: 32px;">
                                  <th align="right" style="width:150px; padding-right:5px;">Offerte voor:</th>
                                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$offertevoor.'</td>
                                </tr>';
            }

            if ($over == '') {
                $over_field = '';
            } else if ($over != '') {
                $over_field = '<tr style="height: 32px;">
                                  <th align="right" style="width:150px; padding-right:5px;">Onderhouds contract:</th>
                                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$over.'</td>
                                </tr>';
            }

            $to      = __TO__;
            $subject = __SUBJECT__.' '.$name;
            $message = '
            <html>
            <head>
              <title>Mail from '.$name.'</title>
            </head>
            <body>
              <table style="width: 500px; font-family: arial; font-size: 14px;" border="1">
              '.$hidden_field.'
              '.$over_field.'
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Naam:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$name.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Adres:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$adres.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Woonplaats:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$woonplaats.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Telefoon:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$telefoon.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">E-mail:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$mail.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Tijdsspan:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$tijd.'</td>
                </tr>
                <tr style="height: 32px;">
                  <th align="right" style="width:150px; padding-right:5px;">Ketel:</th>
                  <td align="left" style="padding-left:5px; line-height: 20px;">'.$keteltype.'</td>
                </tr>
              </table>
            </body>
            </html>
            ';
        }

        $headers = 'MIME-Version: 1.0'."\r\n";
        $headers .= 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= 'From: '.$mail."\r\n";

        if (send_mail($to, $subject, $message, $headers)) {
            echo json_encode(array('success' => 'error', 'msg' => 'Bedankt voor het opnemen van contact'));
        }
    }
} else {
    echo json_encode(array('info' => 'error', 'msg' => __MESSAGE_EMPTY_FILDS__));
}
?>

Настройка отчетов об ошибках для отображения всех ошибок и перехода непосредственно к файлу php в моем браузере также ничего не показывает.

Как это исправить?

1 Ответ

0 голосов
/ 20 декабря 2018

Проблема (или, по крайней мере, первая проблема?) Заключается в первой строке кода в функции check_mail.

if (!@eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {

Функция eregi() устарела и удалена какPHP 7.0.Вам нужно будет заменить его на preg_match() или аналогичный.

Причина, по которой он не отображал сообщение об ошибке, заключается в том, что вы использовали префикс @, который говорит PHP подавлять ошибки.Использование оператора @ считается плохой практикой в ​​наши дни именно по такой причине.

Вероятно, возникнут дополнительные проблемы;У меня не было возможности пройти дальше по коду, но тот сразу же выскочил на меня.

...