2015-07-11 3 views
0

Я использую PHPMailer для отправки писем, но из моего localhost в xampp. Когда я тестирую свой API в Postman, для обработки запроса требуется слишком много времени, но он отображает статус ответа 200, но ответ JSON не возвращается. Ниже приведены мои коды.Состояние ответа 200, но не JSON

public function actionSendMail() { 
    //Getting request from frontend 
    $request = file_get_contents('php://input'); 

    //Decoding input into an array 
    $input = json_decode($request, true); 

    //Validating request 
    if (is_null($input)) { 
     $response = json_encode(['error' => 'Bad Input']); 
     die($response); 

    } else { 
     //mail parameters 
     $to  = $input['to']; 
     $subject = $input['subject']; 
     $body = $input['body']; 
     $headers = $input['headers']; 

     //Sending mail 
     if($result = $this->sendMail($to, $subject, $body, $headers) === true) { 
      $response = json_encode(['success' => true]); 
      echo $response; 
     } else { 
      $response = json_encode(['error' => 'Mail Not Sent']); 
      die($response); 
     } 
    } 
} 

private function sendMail ($to, $subject, $body, $headers) { 
    //Configurating PHP Mailer 
    $mail = new PHPMailer(); 

    $mail->IsSMTP();         
    $mail->Host = 'secure.emailsrvr.com'; 
    $mail->Port = 995; 
    $mail->SMTPAuth = true;        
    $mail->Username = '[email protected]';       
    $mail->Password = '****';       
    $mail->SMTPSecure = 'ssl';     
    $mail->WordWrap = 50;  
    $mail->IsHTML(true); 

    $mail->SetFrom('[email protected]'); 
    $mail->AddReplyTo($headers); 
    $mail->Subject = $subject; 
    $mail->MsgHTML($body); 
    $mail->AddAddress($to, ""); 

    if(!$mail->Send()) 
     return $mail->ErrorInfo; 

    return true; 
} 

Спасибо за ваше время.

+0

смог извлечь после ответа HTTP вы получили от Почтальон Вы? – light

+0

@light, в почтальоне Я просто получаю пустой HTML, но в ответе JSON говорится, что ответ не ответил. Но статус ответа 200 –

+0

Хорошо. Анализируя код, я думаю, что это потому, что 'die()' просто завершает PHP-скрипт, и, следовательно, веб-сервер возвращает «200», указывающий на успех, так как ваш PHP-скрипт не устанавливал заголовки иначе. Теперь проблема в том, почему почта была неудачной. В какой ОС вы работаете? – light

ответ

0

Вам необходимо проверить код отправки почты в изоляции - ошибки скрываются за вашим другим кодом. Длительная задержка, скорее всего, означает, что у вас есть тайм-аут сети, из-за плохой связи или таймаута DNS. Попробуйте установить $mail->SMTPDebug = 3;, чтобы вы могли видеть ошибки подключения. Проверьте PHPMailer troubleshooting guide.

0

использовать это при проверке почты ответ

if($this->sendMail($to, $subject, $body, $headers)) { 
    $response = json_encode(['success' => true]); 
    echo $response; 
} 
else { 
    $response = json_encode(['error' => 'Mail Not Sent']); 
    die($response); 
} 
Смежные вопросы