问题
I'm trying to send a dynamic HTML table with PHPmailer but i don't know how, is posible get a variable with all table? or something like that ?
Here is my code:
require("inc/class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->From = ('compras.co@kantarworldpanel.com');
$mail->FromName = ('Compras CO (KWBTA)');
$mail->AddAddress($_POST['providermail']);
$mail->AddCC("camilo.uribe@kantarworldpanel.com.co");
$mail->IsHTML(true);
//IF SUBMIT, SEND MAIL
if (isset ($_POST['send_approve'])) {
$mail->Subject = "Kantar Worldpanel - Solicitud de Cotización";
$contenido = 'Kantar Worldpanel Perú S.A. Sucursal Colombia desea solicitar a ustedes la cotización correspondiente a los siguientes Items:<br>';
////////////////////////////////////////////
$contenido .= ' The Table should be here;
///////////////////////////////////////////
$mail->Body = $contenido;
$mail->Send();
header ("Location: RequestsPA.php");
}
And here is the table code:
<?php
$sqlStr = "SELECT items.CA_id, items.item_id, items.item_Cant, items.CECO_cod, items.item_desc, items.item_enduser
FROM items where CA_id = ".$CA_id;
$sqlStrAux = "SELECT count(*) as total FROM items";
$aux = Mysql_Fetch_Assoc(mysql_query($sqlStrAux));
$query = mysql_query($sqlStr);
if($aux['total']>0){
echo "</br></br>";
echo "<div class='datagrid'>";
echo "\t<table class=\"tablesorter\">\n";
echo "<thead>";
echo "<tr>
<th>Item</th>
<th>Cantidad</th>
<th>CECO</th>
<th>Descripción de solicitud</th>
<th>Usuario final</th>
</tr>\n";
echo "</thead>";
echo "<tbody>";
$r=0;
while($row = mysql_fetch_assoc($query)){
echo "\t\t<tr class=\"row$r\">
<td>".htmlentities($row['item_id'])."</td>
<td>".htmlentities($row['item_Cant'])."</td>
<td>".htmlentities($row['CECO_cod'])."</td>
<td>".$row['item_desc']."</td>
<td>".$row['item_enduser']."</td>
</tr>\n";
if($r%2==0)++$r;else--$r;
}
echo "</tbody>";
echo "\t</table>\n";
}
echo "</div>";
?>
I hope you can understand me, thanks for your help.
回答1:
While you can use echo to output your table and capture it with output buffering, but generally it's easier to assemble the message body in a string, like this:
$contenido = '';
if($aux['total']>0){
$contenido .= "</br></br>";
$contenido .= "<div class='datagrid'>";
$contenido .= "\t<table class=\"tablesorter\">\n";
$contenido .= "<thead>";
...
Then just use that string as your message body. If you use the same code to generate web page output as your email content then turn that script into a function you can call from either place.
回答2:
ob_start();
echo 'all my lines of code';
$contenido = ob_get_clean();
The above will capture everything between the first and last lines.
来源:https://stackoverflow.com/questions/24922459/send-html-table-through-phpmailer