Эта ите не может быть достигнута (PHP почтовик) - PullRequest
1 голос
/ 24 апреля 2020

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

Это код

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';

// Instantiation and passing [ICODE]true[/ICODE] enables exceptions
$mail = new PHPMailer(true);

try {

    function get_ip() {
        if(isset($_SERVER['HTTP_CLIENT_IP'])) {
          return $_SERVER['HTTP_CLIENT_IP'];
        }
        elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
         return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        else {
         return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');

          }
        }
    //Server settings
    $ip=get_ip();
    $query=@unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
    $mail->SMTPDebug = 2;                                       // Enable verbose debug output
    $mail->isMail();                                            // Set mailer to use SMTP
    $mail->Host       = 'smtp.office365.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = '//';                     // SMTP username
    $mail->Password   = '///';                               // SMTP password
    $mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, [ICODE]ssl[/ICODE] also accepted
    $mail->Port       = 587;                                    // TCP port to connect to

    $ips=$_SERVER['REMOTE_ADDR'];
    $name = $_POST['name'];
    $email = $_POST['email'];
    $mobile = $_POST['mobile'];
    $landline = $_POST['landline'];
    $date = $_POST['date'];
    $people = $_POST['people'];
    $lunch = $_POST['lunch'];
    $enquiry = $_POST['enquiry'];
    $questions = $_POST['questions'];
    //Recipients
    $mail->setFrom($email, $name);
    $mail->addAddress('bookings@rios.com.au', 'Rios bookings');               // Name is optional
    $mail->addAddress($email, $name);     // Add a recipient
    $mail->addReplyTo('bookings@rios.com.au', 'Information from customer');
    // $mail->addCC('cc@example.com');
    // $mail->addBCC('bcc@example.com');

    // // Attachments
    // $mail->addAttachment('/home/cpanelusername/attachment.txt');         // Add attachments
    // $mail->addAttachment('/home/cpanelusername/image.jpg', 'new.jpg');    // Optional name

    // Content
    // $mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Rio E-mail from Website / Contact Us Form';
$mail->Body = "
New Message from Rio Contact Form

Name: {$name}

Email: {$email}

Mobile: {$mobile}

Landline: {$landline}

Date: {$date}

People: {$people}

Lunch or Dinner: {$lunch}

Enquiry or booking: {$enquiry}

Questions: {$questions}










{$ips} {$query['city']} {$query['regionName']} {$query['zip']} {$query['timezone']}
";
    header('location:success.html');
    $mail->send();
    echo 'Message has been sent';

} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Вот как я организовал файлы файлы

........................................ ............................................

1 Ответ

0 голосов
/ 24 апреля 2020

Это плохой шаблон:

header('location:success.html');
$mail->send();
echo 'Message has been sent';

Вы не знаете, что отправка прошла успешно до после вызова send() и любого контента, который вы выводите после установки заголовка будет либо потерян (потому что он перенаправляет, пока его не увидят), либо предотвратит перенаправление (потому что контент уже отправлен). Этого должно быть достаточно в следующем порядке:

$mail->send();
header('location:success.html');
exit; //Do nothing else after issuing the redirect

Строго говоря, перенаправления должны использовать абсолютные URL-адреса, поэтому, возможно, добавьте это в адрес назначения.

Вы также делаете это:

$email = $_POST['email'];
...
$mail->setFrom($email, $name);

Это подделка и, вероятно, в конечном итоге ваше сообщение будет заблокировано, отклонено или отфильтровано. Сделайте это вместо этого:

$mail->setFrom('bookings@rios.com.au', $name);
$mail->addAddress('bookings@rios.com.au', 'Rios bookings');
$mail->addReplyTo($email, $name);

Таким образом, сообщение будет отправлено вам, но ответы будут go на адрес отправителя.

Еще один совет - узнайте, как использовать composer.

...