【问题标题】:how to send the database data as email using php mailer?如何使用 php mailer 将数据库数据作为电子邮件发送?
【发布时间】:2016-10-16 10:10:57
【问题描述】:

我正在尝试使用 php mailer 将数据库数据作为邮件发送。电子邮件正在正确发送,但在消息中我只得到数据库中的最后一个数据。我该怎么做才能发送数据库中的所有数据。

我试过以下代码:

<?php
    require 'PHPMailer/PHPMailerAutoload.php';
function Selectdata($table,$condition)
{
    global $conn,$result,$selectarray,$rowcount;
    $sql="SELECT * from ".$table." ".$condition." ";
    $result=$conn->query($sql);
    $rowcount=$result->num_rows;
    $selectarray = array();
    while($row=$result->fetch_assoc())
    {   
        $selectarray[]=$row;
    }
    return $result;
}

// function for join
function outerjoin($query)
{
    global $conn,$result,$selectoutter,$rowcount;
    $sql="".$query."";
    $result=$conn->query($sql);
    $rowcount=$result->num_rows;
    $selectoutter = array();
    while($row=$result->fetch_assoc())
    {
        $selectoutter[]=$row;
    }
}

    $mail = new PHPMailer;
    $mail->isSMTP();                                     
    $mail->Host = 'smtp.gmail.com';  
    $mail->SMTPAuth = true;                               
    $mail->Username = 'kumaresh.arun93@gmail.com';            
    $mail->Password = 'xxxxxxxxxxxxx';                          
    $mail->SMTPSecure = 'tls';                            
    $mail->Port = 587;                                    
    $mail->SMTPDebug = 1;                                 
    $mail->setFrom('kumaresh.arun93@gmail.com', 'Arun');
    $mail->addAddress('kumaresh.boss@gmail.com', 'kumaresh');    

    $mail->IsHTML (true);
    $mail->Subject = 'Messages From Forum';
    $table="mdl_course";
    $condition="";
    $selectcourse=Selectdata($condition,$table);

    foreach ($selectarray as $cid) {

        $query="SELECT a.name as forumname,b.name as discussion,c.message,c.userid,d.firstname,d.email,d.phone1 from mdl_forum as a inner join mdl_forum_discussions b on a.id=b.forum inner join mdl_forum_posts c on b.id=c.discussion inner join mdl_user d on c.userid=d.id where a.course=".$cid['id']." and a.category=1 and from_unixtime(c.modified,'%Y-%m-%d')=CURDATE()";
        $selectmsg=outerjoin($query);

        foreach ($selectoutter as $fmsg) {
            $mail->Body =  '<p><b>Forum Name:</b>&nbsp;&nbsp;&nbsp;'.$fmsg['forumname'].'</p>'; 
            $mail->Body.= '<p><b>Discussion Name:</b>&nbsp;&nbsp;&nbsp;'.$fmsg['discussion'].'</p>';    
            $mail->Body.= '<p><b>Message:</b>&nbsp;&nbsp;&nbsp;'.$fmsg['message'].'</p>';   
        }
    }

    $send = $mail->Send();
    if (!$send) {
        echo 'Message could not be sent.';
    // echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message has been sent';
    }
?>

【问题讨论】:

  • $selectarray 来自哪里?我看不到对该变量的任何引用。

标签: php mysql email phpmailer


【解决方案1】:

对于查询结果的每一行,您都在截断邮件正文:

$mail->Body=  '<p><b>Forum [...]

在循环前设置$mail-&gt;Body,然后用.=添加行信息

【讨论】:

    【解决方案2】:

    更新了 foreach 循环

    $body = '';    
    foreach($selectarray as $cid)
    {
        $query = "SELECT a.name as forumname,b.name as discussion,c.message,c.userid,d.firstname,d.email,d.phone1 from mdl_forum as a inner join mdl_forum_discussions b on a.id=b.forum inner join mdl_forum_posts c on b.id=c.discussion inner join mdl_user d on c.userid=d.id where a.course=".$cid['id']." and a.category=1 and from_unixtime(c.modified,'%Y-%m-%d')=CURDATE()";
        $selectmsg = outerjoin($query);
        foreach($selectoutter as $fmsg)
        {
            $body .=  '<p><b>Forum Name:</b>&nbsp;&nbsp;&nbsp;'.$fmsg['forumname'].'</p>';   
            $body .= '<p><b>Discussion Name:</b>&nbsp;&nbsp;&nbsp;'.$fmsg['discussion'].'</p>'; 
            $body .= '<p><b>Message:</b>&nbsp;&nbsp;&nbsp;'.$fmsg['message'].'</p>';    
        }
    
    }
    
    $mail->Body = $body;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多