phpmailer无效地址错误

时间:2015-10-15 20:09:25

标签: php 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('kasper.lassner@peterwolf.agency', '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!
        }
    }
    ?>

所以我的问题如下:我得到一个&#34;无效地址:&#34;&#34;错误。当我评论这一行时:

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

取消注释这一行:

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

传递字符串值有效。所以问题显然是$email变量在某种程度上是不被接受的。 var_dump输出:"string(24) "*******@****.com"所以它是一个字符串。

我已经搜索过已有的答案,但无法找到具体问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的问题在http://php.net/manual/en/language.variables.scope.php中解释。

默认情况下,函数中使用的每个变量都隐含在该函数的本地变量中。 $email中的mailImages$email外部无关。由于未设置变量,因此会导致&#34;无效地址&#34;错误。

您可以通过添加其他函数参数来解决此问题:

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

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

或明确将$email标记为全局:

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