2016-12-17 4 views
-1

Поэтому я использую PHPMailer для отправки электронных писем с подтверждением бронирования пользователям. Он работал на месяцах, но внезапно он просто прекратил работать. Ничего не изменилось (по крайней мере, я ничего не менял). Файлы PHPMailer по-прежнему не повреждены, и я не играл с записями DNS/MX. Вот сценарий для отправки электронных писем. Он отправляет один пользователю и один для меня на мой местный адрес электронной почты. Письмо, направленное на меня, отправляется успешно, но клиент его не получает. Когда я пытаюсь отправить его только клиенту, в информации об отладке говорится, что письмо отправлено. Он продолжает говорить 250 OK, ссылаясь на адрес получателя (что, я думаю, означает его принятие). Он также показывает сообщение в целом, а затем, в конце концов, он закрывает соединение. В сценарии он должен также echo "true", и он это делает. Тем не менее, у меня нет электронной почты. BTW, я использую PHPMailer, в частности, и только два файла, упомянутые в приведенных ниже сценариях, указаны ниже в сценарии нижеPHPMailer внезапно прекращает отправлять электронные письма на нелокальные адреса электронной почты

Вот сценарий для фактической отправки электронной почты.

<?php 
include "connection.php"; 
session_start(); 
if(isset($_POST['problem_name'])){ 

    $name = $_POST['name']; 
    $address = $_POST['address']; 
    $phone = $_POST['phone']; 
    $email = $_POST['email']; 
    $model_name = $_POST['model_name']; 
    $problem_name = $_POST['problem_name']; 
    $package_name = $_POST['package_name']; 
    $price = $_POST['price']; 

    $query = "INSERT INTO ext_orders (`date`, `name`, `address`, `phone`, `email`, `product`, `problem`, `package`, `addons`, `price`) VALUES ('".date("Y/m/d")."', '".$name."', '".$address."', '".$phone."', '".$email."', '".$model_name."', '".$problem_name."', '".$package_name."', 'No', ".intval($price).")"; 

    if(mysqli_query($link, $query)){ 

     $latest_id = mysqli_insert_id($link); 

     /***** COMPOSING OF EMAIL TO CUSTOMER AND A BCC TO MOBILECARE ******/ 
     $message= 
     ' 
     <h1>Mobilecare Urgent Repair Order Confirmation</h1> <br /> 

     <h3> Personal Details </h3><br/> 

     <b>Name:</b> '.$name.'<br /> 
     <b>Urgent Repair Address:</b> '.$address.'<br /> 
     <b>Email:</b> '.$email.'<br /> 
     <b>Phone Number:</b> '.$phone.'<br /> 

     <h3> Product and order details </h3><br/> 

     <b>Model:</b> '.$model_name.'<br/> 
     <b>Type of Repair:</b> '.$problem_name.'<br/> 
     <b>Price:</b> '.$price.'<br/><br/> 

     If there are any problems with the information above, please reply to this email!<br/><br/> 

     Thank you,<br/> 
     Mobilecare. 

     '; 

     include "../phpmailer/class.smtp.php"; 
     include "../phpmailer/class.phpmailer.php"; 

     $mail = new PHPMailer(); 
     //Tell PHPMailer to use SMTP 
     $mail->isSMTP(); 
     $mail->SMTPDebug = true; 
     //Enable SMTP debugging 
     // 0 = off (for production use) 
     // 1 = client messages 
     // 2 = client and server messages 
     $mail->Host = localhost; 
     //Set who the message is to be sent from 
     $mail->setFrom('[email protected]', 'Mobilecare'); // [email protected] 
     //Set an alternative reply-to address 
     //$mail->addReplyTo('[email protected]', 'First Last'); 
     //Set who the message is to be sent to 
     $mail->addAddress(''.$email.'', ''.$name.''); 
      // $mail->AddBCC("[email protected]", "Mobilecare"); // [email protected] 
     //Set the subject line 
     $mail->Subject = 'Mobilecare Order Confirmation'; 
     //Read an HTML message body from an external file, convert referenced images to embedded, 
     //convert HTML into a basic plain-text alternative body 
     $mail->MsgHTML($message); 
     //Replace the plain text body with one created manually 
     $mail->AltBody = 'This is a plain-text message body'; 

     if ($mail->send()) { 

      echo "true"; 

     } 

    } 
    else{ 
     echo "fail"; 
    } 


} 

?> 

Все ответы и комментарии будут оценены.

Я уже пробовал: - Комментирование $mail->isSMTP() - Воспроизведение с MX Records (все изменения, вновь стали, хотя) - Redownloading PHPMailer (последняя версия)

+0

Можете ли вы отправить почту из командной строки? – user2182349

ответ

2

вы отправляете на локальный, что означает вы отправляете на локальный почтовый сервер. Это должно означать, что вы получаете одинаковые результаты, используя isMail или isSMTP, которыми вы являетесь. Похоже, что подача работает (ваши результаты 250 OK), но вперед доставка с вашего почтового сервера нет. Это означает, что в коде PHPMailer нет ничего плохого, но вам нужно проверить журналы и конфигурацию вашего почтового сервера.

+0

Да, я позвонил своему провайдеру услуг (GoDaddy), и им пришлось переключать записи MX. Это должно сработать, говорят они, давайте до 48 часов. Так что да, код в порядке, как вы сказали –

+1

А, вы не сказали, что это GoDaddy. Они блокируют исходящий SMTP по умолчанию, поэтому я удивлен, что он когда-либо работал! Вы должны осуществлять ретрансляцию через свои почтовые серверы (в домене '* .secureserver.net'), которые вы можете настроить для своего почтового сервера. Это описано в руководстве по поиску и устранению неполадок PHPMailer. Кроме того, записи MX не должны иметь никакого отношения к этому вообще - они влияют только на входящую почту. – Synchro