【问题标题】:PHP Mailer not sending e-mail from variable addressPHPMailer不从变量地址发送电子邮件
【发布时间】:2021-08-31 01:09:10
【问题描述】:

那里的情况怎么样?

我开发了一个 php 脚本来向主要用户和其他一些复制用户发送电子邮件。当我测试它时,将电子邮件和姓名直接放入代码中,如下所示:$mail->addAddress('email@provider.com','Any Name'); 我成功收到电子邮件,但是当我从 mysql 数据库中获取它们时:$mail->addAddress($r['userEmail',$r['userFullName']); $mail->addCC($r['userEmail2',$r['userFullName2']); 脚本运行成功,但电子邮件始终未到达。

以前是否有人遇到过类似的情况并可以帮助解决我的问题?

查看我的所有代码:

    <?php
    include '../dao/conn.php';
    require_once('../inc/phpmailer/class.phpmailer.php');
    $mail = new PHPMailer(true);
    $mail->IsSMTP();
    $mail->Host = 'smtp.domainname.com';
    $mail->Port = 25;
    $mail->SetFrom('no-reply@domainname.com');
    $mail->IsHTML(true);

    //pesquisa os projetos finalizados ha mais de 90  dias expecificado pelo envio manual
    $sql1 = "SELECT p.PDC_NumControle ID
    ,p.PDC_Nome Projeto
    ,DATE_FORMAT(g.GRT_DataInicio,'%d/%m/%Y') DataTermino
    ,datediff(sysdate(), g.GRT_DataInicio) Dias
    ,l.`Position Name` NomePresidente
    ,l.`Position Email` EmailPresidente
    ,u.ManagerName NomeGerente
    ,u.ManagerEmail EmailGerente
    ,u.ArchtectName NomeArquiteto
    ,u.ArchtectEmail EmailArquiteto
    FROM tabgarantiaprojeto g
    INNER JOIN tabprojetos p ON g.GRT_NumContProjeto = p.PDC_NumControle
    INNER JOIN tabpwdusuario u ON u.USU_NumControle = p.PDC_NumContUsuario
    WHERE g.GRT_Status = 1 AND g.GRT_NumControle = $idGarantia AND datediff(sysdate(), g.GRT_DataInicio) >= 90;";
    $res1 = mysqli_query($conn, $sql1);
    $rowCount = mysqli_num_rows($res1);

    if($rowCount > 0) {
        $r = mysqli_fetch_assoc($res1);
    
        //Lê os dados do projetos e envia e-mail para o presidente
        $diasProj = $r["Dias"];
        $projID = $r["ID"];
        $NomeProjeto = $r["Projeto"];
        $dataTermino = $r["DataTermino"];
        
        $mail->AddAddress($r['EmailPresidente'], $r['NomePresidente']);
        $mail->addCC($r['EmailArquiteto'], $r['NomeArquiteto']);
        $mail->addCC($r['EmailGerente'], $r['NomeGerente']);

        $mail->Subject = "Garantia de Obra - $NomeProjeto";
        $mail->AltBody = "";
        $mail->IsHTML(true);
        
        $conteudo = 'Here is my html content';
        $mail->Body = $conteudo;
        $resp = $mail->send();
        if ($resp) {
           $res = 1;
           $msg = "E-mail de aviso enviado com sucesso!"; 
        } else {
           $res = 0;
           $msg = "Não foi possivel processar sua solicitação por causa do seguinte erro: " . $mail->ErrorInfo;
        }
        $mail->ClearAddresses();
        $mail->ClearCCs();
        $mail->ClearBCCs();
           
    }

Any help will be appreciated.

【问题讨论】:

  • 首先,您使用的是包含已知漏洞的古老版本的 PHPMailer。您需要升级。不要假设您的变量包含您希望它们执行的操作:check。此外,您对addAddress 没有错误检查,因此您永远不会知道它是否失败。

标签: php mysql phpmailer


【解决方案1】:

尝试先将值设置为变量,例如

$addcc1 = $r['EmailArquiteto']; $addnom1 = $r['NomeArquiteto'];

然后将邮件设置为该变量:

$mail->addCC($addcc1, $addnom1);

这样您还可以进行故障排除,例如:

echo "$addcc1 - $addnom1" 以确保它们符合您的预期。

【讨论】:

  • 这是我做的第一件事,但没有成功。
  • 回显变量的输出是否符合您的预期?如果您从数据库中提取它们,它们可能会在插入数据库之前被转义或进行其他一些清理,并且可能需要在用于脚本之前进行处理。
【解决方案2】:

脚本一切正常,因为我没有收到复制给我的电子邮件,我以为脚本有问题,但所有其他收件人都成功收到了电子邮件。

问题在于我的电子邮件帐户没有收到来自应用程序的电子邮件。我将与电子邮件服务器团队一起调查。

感谢您的所有提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2020-09-01
    • 2015-06-25
    相关资源
    最近更新 更多