【问题标题】:php auto mailer addAddressphp 自动邮件添加地址
【发布时间】:2018-10-28 16:50:26
【问题描述】:

我想通过从数据库中获取电子邮件值来向用户发送 otp 邮件。我正在使用 php 自动邮件程序。当我直接使用邮件地址时它可以工作,但是当我从数据库中检索它时我无法发送它。谁能帮我发一下。

    function mailit()
    {
            $rand=rand(100000,999999);
            $user=$_SESSION['user'];

            $sql=mysqli_query($db,"UPDATE `doctor_login` SET `otp`='$rand' WHERE `doctor_id`='1'");

            $mail = new PHPMailer;

            $mail->isSMTP();                                      // Set mailer to use SMTP
            $mail->Host = '';  // Specify main and backup SMTP servers
            $mail->SMTPAuth = true;                               // Enable SMTP authentication
            $mail->Username = 'myusername ';                 // SMTP username
            $mail->Password = 'mypassword';                           // SMTP password
            $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
            $mail->Port = 587 ;                                    // TCP port to connect to

            $mail->setFrom('dont_reply_back@example.xyz');
            $mail->addAddress('$row');     // Add a recipient
            $mail->addReplyTo('dont_reply_back@example.xyz');


            $mail->isHTML(true);                                  // Set email format to HTML
            $mail->Subject = 'THis is your OTP';
            $mail->Body    = 'Your otp is '.$rand; 

            $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

            if(!$mail->send()) {
                echo 'Message could not be sent.';
                echo 'Mailer Error: ' . $mail->ErrorInfo;
    }        
  }

用于检索和显示电子邮件的代码

    $mailadd=mysqli_query($db,"SELECT `doctor_email` FROM `doctor_login` WHERE `doctor_id`='1'");
    $row = mysqli_fetch_array($mailadd,MYSQLI_ASSOC);
    echo $row['doctor_email'];
    $row2=$rowa['doctor_email'];
    echo $row2;

我在 $mail->addAddress 中同时使用了 $row 和 $row2 但似乎不起作用。我能做些什么改变。当我给出一个特定的地址时它就可以工作

【问题讨论】:

  • 那么,获取与mailit() 函数相关的医生电子邮件地址的代码在哪里?
  • 对我来说,这一切都像是一个变量 SCOPE 问题!请记住,如果您在函数外部创建 $row,它将不会在函数内部可见。所以把它作为参数传递给mailit($docs_email)
  • mailint 函数中的 SELECT 应该做什么?
  • 错误检查 但如果您不介意,请将 ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 添加到脚本顶部。这将强制任何 mysqli_ 错误生成您可以在浏览器上看到的异常以及正常的 PHP 错误。

标签: php mysql function session phpmailer


【解决方案1】:

我认为这是一个范围问题。如果在代码主体中调用此代码

$mailadd=mysqli_query($db,"SELECT `doctor_email` 
                            FROM `doctor_login` 
                            WHERE `doctor_id`='1'");
$row = mysqli_fetch_array($mailadd,MYSQLI_ASSOC);

然后我假设您在此之后调用mailit(),因此将您想要用作参数的数据传递给mailit() 函数,以便它在函数范围内可用。

function mailit($row)
{
    $rand=rand(100000,999999);
    $user=$_SESSION['user'];

    $sql=mysqli_query($db,"UPDATE `doctor_login` SET `otp`='$rand' WHERE `doctor_id`='1'");

    $mail = new PHPMailer;

    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = '';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'myusername ';                 // SMTP username
    $mail->Password = 'mypassword';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587 ;                                    // TCP port to connect to

    $mail->setFrom('dont_reply_back@example.xyz');
    $mail->addAddress($row['doctor_email']);     // Add a recipient
    $mail->addReplyTo('dont_reply_back@example.xyz');


    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'THis is your OTP';
    $mail->Body    = 'Your otp is '.$rand; 

    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    if(!$mail->send()) {
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    }        
}

$mailadd=mysqli_query($db,"SELECT `doctor_email` 
                            FROM `doctor_login` 
                            WHERE `doctor_id`='1'");
$row = mysqli_fetch_array($mailadd,MYSQLI_ASSOC);

mailit($row);

您应该已经从原始代码中得到错误,所以以后添加以下内容:

ini_set('display_errors', 1); 
ini_set('log_errors',1); 
error_reporting(E_ALL); 
// if you are using the `mysqli` API
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

到脚本的顶部。这将强制任何 mysqli_ 错误生成您可以在浏览器上看到的异常以及正常的 PHP 错误。

【讨论】:

  • 不只是这个我的朋友@FunkFortyNiner
猜你喜欢
  • 2015-11-11
  • 2016-12-23
  • 2010-09-19
  • 1970-01-01
  • 2020-09-15
  • 2013-04-26
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多