为什么我为$ mail对象获取空值?

时间:2015-04-02 09:44:44

标签: php email phpexcel phpmailer

我正在使用代码查找迟到的个人并向他们发送电子邮件。我也找到那些根本没有来的人,也发送电子邮件给他们。但是,它不起作用。我正确地获取了名称和电子邮件,但$ mail对象为空,我不明白为什么。

这是我的代码:

mail_sender.php(这是我打电话发送的消息)

<?php

function custom_mail($name, $surname, $email, $message, $subject){
    //$mail->SMTPDebug = 3;                               // Enable verbose debug output
        require './PHPMailer-master/PHPMailerAutoload.php';
        $mail = new PHPMailer();
        global $mail;
        var_dump($mail); 
        $mail->isSMTP();                                      // Set mailer to use SMTP
        $mail->Host = 'smtp.gmail.com;';  // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;                               // Enable SMTP authentication
        $mail->Username = '****';                 // SMTP username
        $mail->Password = '****';                           // SMTP password

        $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
        $mail->Port = ****;                                    // TCP port to connect to        
        $mail->From = '****';
        $mail->FromName = '****';

        $mail->addAddress($email, $name." ".$surname);     // Add a recipient
        $mail->addCC('****');
        $mail->isHTML(true);                                  // Set email format to HTML   
        $mail->Subject = $subject;
        $mail->Body    = ucwords($name).' '.ucwords($surname).'! <br />'.$message;
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
        //
        if(!$mail->send()) {
                echo 'email -> '.$email.' name -> '.$name.' surname -> '.$surname.'<br />';
                echo 'Mailer Error: ' . $mail->ErrorInfo;
        } 
        else    {                           
                    $mail->ClearAllRecipients();        //clears the list of recipients to avoid other people from getting this email               
        }   
}   

?>

1 个答案:

答案 0 :(得分:1)

我认为这可能是你的问题:

$mail = new PHPMailer();
global $mail;
var_dump($mail);

这看起来不是一个好主意 - 如果你已经有一个全局定义的$mail变量,它可能会覆盖你的PHPMailer实例,使其成为null。将订单更改为:

global $mail;
$mail = new PHPMailer();
var_dump($mail);

我没有看到在全球范围内提供此功能的充分理由 - 如果您想在多个来电中重复使用该实例,这不会有帮助 - 您应该是静静地宣布这样做,如下:

static $mail;
if (!isset($mail)) {
    $mail = new PHPMailer();
}
var_dump($mail);