【问题标题】:PHPMailer failingPHPMailer失败
【发布时间】:2014-04-20 10:18:04
【问题描述】:

好的,我猜这很简单,或者我正在使用我不知道的已弃用的东西。

我将从我的代码中删除多余的部分,但删除的所有内容都已经过测试。

原始代码基于我在各处看到的非常常见的教程脚本。它正在排队:

while ($row = $res->fetch_array()) {

并且 php 因一个共同点而失败:在非对象上调用成员函数 fetch_array()。

通常这会向我表明我的 SQL 失败或返回了不需要的东西,我会进行一个小修复,然后继续我的生活。然而,情况似乎并非如此。我一遍又一遍地重复那个 SQL,它正在返回我想要的。

我认为这可能与在 else 中调用 while 循环有关(但这应该不是问题)或者邮件调用在 while 循环中。

原代码:

$email = $link->real_escape_string($_POST["web_forgot_email"]);
$sendemail = 0; 

$sql = "SQL to return Name and Email (Tested extensively and works)";
$res = $link->query($sql);

if ($res->num_rows == 0) {
    $arr = array("web_forgot_success" => "web no account");
    echo json_encode($arr);
} else {    
    while ($row = $res->fetch_array()) {
        $sendemail = $row['CLIENT_EMAIL'];
        $name = $row['NAME'];

        require("class.phpmailer.php");
        $mail = new PHPMailer();    
        $mail->IsSMTP();
        $mail->Host = "localhost";
        $mail->SMTPAuth = true;
        $mail->Username = "quizzically@quizzically.co.uk"; 
        $mail->Password = "quizzically01";                  
        $mail->From = "quizzically@quizzically.co.uk";
        $mail->FromName = "quizzically";
        $mail->AddAddress($sendemail);
        $mail->WordWrap = 50;
        $mail->IsHTML(true);
        $mail->Subject = "quizzically password reset confirmation";
        $mailer = "Email Message";
        $mail->Body = $mailer;
        if(!$mail->Send()) {
        $arr = array("web_forgot_success" => "web no send");
        echo json_encode($arr);
        } else {
        $arr = array("web_forgot_success" => "web forgot success");
        echo json_encode($arr);
        }
    }
}

所以我重新调整了代码,使其首先找到变量 $sendemail 和 $name,然后发送一封电子邮件,但每次(即使 $sendemail 变量不是 0)它都会跳过该 if 语句并返回 else。我已经通过在 else 变量中将 $sendemail 变量发送回我自己来测试它,它绝对不是 0。

好消息是 PHP 没有失败,坏消息是某些东西导致代码跳过了处理发送电子邮件的整个 if 部分。

修改代码:

$email = $link->real_escape_string($_POST["web_forgot_email"]);
$sendemail = 0; 

$sql = "SQL to return Name and Email (Tested extensively and works)";
$res = $link->query($sql);

if ($res->num_rows == 0) {
    $arr = array("web_forgot_success" => "web no account");
    echo json_encode($arr);
} 

while ($row = $res->fetch_array()) {
    $sendemail = $row['CLIENT_EMAIL'];
    $name = $row['NAME'];
}

if ($sendemail != 0) {
    require("class.phpmailer.php");    
    $mail = new PHPMailer();    
    $mail->IsSMTP(); 
    $mail->Host = "localhost"; 
    $mail->SMTPAuth = true; 
    $mail->Username = "quizzically@quizzically.co.uk"; 
    $mail->Password = "quizzically01";              
    $mail->From = "quizzically@quizzically.co.uk";
    $mail->FromName = "quizzically";
    $mail->AddAddress($sendemail);
    $mail->WordWrap = 50;
    $mail->IsHTML(true);
    $mail->Subject = "quizzically password reset confirmation";     
    $mailer = "Email Message";
    $mail->Body = $mailer;

    if(!$mail->Send()) {
        $arr = array("web_forgot_success" => "web no send");
        echo json_encode($arr);
    } else {
        $arr = array("web_forgot_success" => "web forgot success");
        echo json_encode($arr);
    }
} else {
    $arr = array("web_forgot_success" => "web forgot failed");
    echo json_encode($arr);
}

我希望我正在做一些我还没有找到或没有的已弃用的东西,但我们将不胜感激。

【问题讨论】:

    标签: php phpmailer


    【解决方案1】:

    答案是我自己无法完全测试。我发送的电子邮件消息中的 html 有问题。这一定是抛出错误,然后 PHP 在 while 循环中失败。

    修复了 HTML 中的错误(它是一个未转义的双引号),一切正常发送,没有错误。

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2014-06-13
      • 2015-08-09
      • 1970-01-01
      • 2016-08-29
      • 2016-11-10
      相关资源
      最近更新 更多