2017-12-16 4 views
1

PHP를 사용하여 이메일을 보내려면 phpMailer를 사용하고 있습니다. 메일이 전송되었지만받은 편지함/스팸 등에서 수신되지 않았습니다. 며칠 전까지는 효과가 있었음이 놀랍습니다. 나는 그것을 테스트했으며 거의 ​​500-600 개의 이메일을 보내고 받았다. 하지만 갑자기 "작동"이 중지되었습니다. 하지만 [하나] 말한다 phpMailer를 사용하여 PHP 메일 스크립트가 작동하지 않습니다.

public static function mailTo($recipients) 
{ 
    $f3 = \Base::instance(); 
    $edit = $f3->get('editTrue'); 
    $user = AclHelper::getCurrentUser(); 
    $template= new \Template; 
    if(isset($edit)) 
    { 
     $mailBody = $template->render('leave/requestEdit.html'); 
    } 
    else 
    { 
     $mailBody= $template->render('leave/emailTemp.html'); 
    } 

    // When true, PHPMailer returns exceptions 
    $mail = new PHPMailer(true); 
    try { 
     $mail->isSMTP();          // Set mailer to use SMTP 
     $mail->isHTML(true); 

     $mail->addAddress($user['email']); 
     $mail->addAddress("[email protected]"); 

     // foreach($recipients as $recipient){ 
     //  $mail->addCC($recipient); 
     // } 

     $mail->SMTPAuth = true; // authentication enabled 
     $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail 
     $mail->Host = "smtp.gmail.com"; 
     $mail->Port = 465; // or 587 
     $mail->Username = "[email protected]"; 
     $mail->Password = "abcd"; 

     // $mail->Host = $f3->get('GBD.smtp.host'); // Specify main and backup SMTP servers 
     $mail->setFrom($user['email']); 

     $userFullName = trim(ucfirst($user['firstname'])) . " " . trim(ucfirst($user['lastname'])); 
     $mail->FromName = $userFullName; 
     $mail->Body = $f3->get('message'); 
     $mail->Body .="<br>". $mailBody; 

     if(isset($edit)) 
     { 
      $mail->AltBody = ''; 
     } 
     else 
     { 
      $mail->AltBody = 'Hello Team,<br>I would like to request leave for the leave dates specified as follows. 
     Application Date:' . $f3->get('issuedDate') . '<br>Leave requested from:' . $f3->get('leaveFrom') . '<br>Leave requested to:' . $f3->get('leaveTo') . '<br>Leave Description:' . $f3->get('leaveDescription') . 'Leave Type:' . $f3->get('leaveType').'<br><br>Hoping for a positive response.<br><br> Thank you.'; 
     } 

     $mail->Subject = 'Updates on leave date applied'; 

     $mailStatus = (boolean)$mail->send(); 

     if ($mailStatus === true) { 
      return $mail; 
     } 
    } catch (phpmailerException $e) { 
     $response = array(
      'status'=>'error', 
      'message'=>'Got some error while sending emails', 
      'exceptions'=>$e->getMessage() 
     ); 
     return $response; 

    } catch (Exception $e) { 
     $response = array(
      'status'=>'error', 
      'message'=>'Got some error while sending emails', 
      'exceptions'=>$e->getMessage() 
     ); 

     return $response; 
    } 
} 

내가 정크 이메일을받은 :

여기 내 PHP 스크립트의

This sender failed our fraud detection checks and may not be who they appear to be. Learn about spoofing 

내가 잘못 무슨 일이 일어나고 있는지 알아낼 수 없습니다.

이전까지 작동합니다. 그리고받은 편지함에는 수 많은 이메일이 있습니다.

전자 메일을 보내는 데 제한이 있습니까? 아니면 어떤 사람이 스팸 또는 스푸핑으로 신고했을 수 있습니까?

모든 도움을 주시면 대단히 감사하겠습니다. 감사.

+1

$ mail-> SMTPDebug = 2 설정; 디버그하여 클라이언트 서버 응답을 확인하십시오. –

+0

출력을 어디에서 찾을 수 있습니까? – Azima

+0

그냥 "mailTo"함수의 출력을 echo하려고 시도합니다. –

답변

1

SMTPSecure = 'ssl'을 사용하고 있으므로 SMTPDebug = 2과 함께 디버그 출력을 얻지 못합니다. 그 이유는 SMTP 수준 출력 만 표시되기 때문입니다. 연결 수준 문제를 표시하려면 SMTPDebug = 3이 필요합니다. 이것은 아마도 PHP 설정의 만료 된 CA 인증서로 인해 발생합니다. gmail이 최근에 (왜 스크립트가 작동하지 않는지) 바뀌었기 때문에 많은보고가있었습니다. the troubleshooting guide에 설명되어 있습니다.

또한 HTML 태그를 계획 텍스트에 넣는 이유는 무엇입니까? AltBody? 그들은 거기에서 일하지 않을 것이다.

+0

오래된 CA 인증서입니까? 서버에서 작동하지만 내 로컬 호스트에서 작동하지 않습니다 ... 서버에서도 동일한 코드를 사용하고 있습니다 ... – Azima

+0

주의 깊게 읽으십시오 : ** CA 인증서 **. 이들은 연결할 때 서버가 제공하는 인증서가 아닙니다. 이 인증서는 서버가 이미 가지고 있으며 서버에서 제공된 인증서가 유효한지 확인하는 데 사용하는 인증서입니다. 당신의 결과는 그들 중 하나는 최신이고 다른 하나는 그렇지 않다는 것을 알려줍니다. 그것은 당신의 OS와 PHP 설정이 잘못되었다는 것입니다 - 당신의 코드와 관련이 없습니다. – Synchro

+0

감사합니다 ... 나는 그것을 확인합니다 ... :) – Azima

관련 문제