2015-10-15 185 views
0

代碼:PHPMailer的無效地址錯誤

<?php 

    if(isset($_POST['data']) && !empty($_POST['data']) && isset($_POST['email']) && !empty($_POST['email'])) { 
    $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 

    var_dump($email); 
     $data = explode(',', $_POST['data']); 

     mailImages($data); 

    } 


    function mailImages($data){ 
     require_once "../PHPMailer_5.2.0/class.phpmailer.php"; 

     $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch 

     try { 
      $mail->CharSet = 'UTF-8'; 
      $mail->AddReplyTo('[email protected]', 'Colegio Suizo de México'); 
     // $mail->AddAddress('******@****.agency','K L'); 
      //$mail->AddAddress('"'.$email.'"',''); 
      $mail->AddAddress($email,'test'); 
      $mail->SetFrom('*******@********.agency', 'Colegio Suizo de México'); 
      $mail->Subject = 'CSM Fotos'; 
      $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically 
      $mail->MsgHTML('Test message'); 

      foreach($data as $image){ 
      $mail->AddAttachment(realpath(dirname(__FILE__)).'/'.str_replace(' ','',$image)); 
      } 


      $mail->Send(); 
      echo 'OK'; 
     } catch (phpmailerException $e) { 
      //echo $e->errorMessage(); 
      echo $mail->ErrorInfo; 

     } catch (Exception $e) { 
      echo 'NO';//Boring error messages from anything else! 
     } 
    } 
    ?> 

所以我的問題是這樣的:我得到一個「無效的地址:」」錯誤,當我註釋此行:

$mail->AddAddress($email,'test'); 

,並取消本行:

$mail->AddAddress('******@****.agency','K L'); 

傳遞一個字符串值,工作這麼清楚的問題是,$email變種。無論如何不被接受。 var_dump輸出:"string(24) "*******@****.com"所以它是一個字符串。

我已經搜查中已有答案,但沒有找到該特定問題。

任何幫助,非常感謝。

+0

它沒有幫助,您已經基於過時的代碼例如,並使用一個真正的舊版本的PHPMailer。 [獲取最新版本](https://github.com/PHPMailer/PHPMailer)。 – Synchro

+1

^^對。變量'$ email'似乎不在'mailImages()'函數的範圍內。只有'$ data'作爲參數傳遞。 –

+0

@Synchro:我昨天從phpmailer網站下載了這個。感謝您的高舉。 –

回答

1

您的問題在http://php.net/manual/en/language.variables.scope.php中解釋。

默認情況下,每次你在函數中使用變量是隱含局部的功能。外部的$emailmailImages無關。由於該變量未設置,因此會導致「無效地址」錯誤。

function mailImages($data, $email) { ... } 

// call as 
mailImages($data, $email); 

或明確標記$email全球:

您可以通過附加其它功能參數解決這個

function mailImages($data) { 
    global $email; 
    ... 
}