2015-10-15 186 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; 
    ... 
}