使用PHP内部的phpmailer创建带有变量行的html表

时间:2015-09-29 15:31:07

标签: php html

所以我试图通过phpmailer将消息通过电子邮件发送给某人。当这是电子邮件时,它需要具有可变数量的行。我在这里发现了一些代码,它指出了我正确的方向,但是当我将这些代码放入消息时,会发生一些事情。

<thead>
    <tr>
        <th>Item Name</th>
        <th>SKU Number</th>
        <th>Price</th>
    </tr>
</thead>
<tbody>
    <?php foreach($stuff as $trow) : ?>
    <tr>
    <td><?php echo $trow->$name; ?></td>
    <td><?php echo $trow->$sku; ?></td>
    <td><?php echo $trow->$price; ?></td>
    </tr> 
    <?php endforeach; ?>
</tbody>

首先foreach循环在第一行结束时关闭,至少这是我假设的,因为我在第一行之后没有其他行。第二,当发送电子邮件时,我收到电子邮件,但分号,问号和结束括号都与每个单元格中的数据一样。但是,我获得的第一行数据是准确的。从来没有得到任何东西。我错过了这段代码吗?我应该发布所有代码以帮助缩小范围吗?我发布了我的phpmailer代码。也许是我试图两次调用php?虽然我认为无关紧要,因为$ message内容是发送到电子邮件地址的html电子邮件。

to_name="$firstname $lastname";
$to="to@email.address";
$subject="Your store order for: $date";
$headers="MIME-VERSION1.0\r\n";
$headers .="Content-Type: text/html; charset=ISO-8859-1\r\n";

$message="Dear $custfirstname $custlastname, Thank you for choosing this store for your purchase. You purchsed the following items on $date at store $store.<br>";

$message .="<table border=\"1\">
<thead>
    <tr>
        <th>Item Name</th>
        <th>SKU Number</th>
        <th>Price</th>
    </tr>
</thead>
<tbody>
    <?php foreach($stuff as $trow) : ?>
    <tr>
    <td><?php echo $trow->name; ?></td>
    <td><?php echo $trow->sku; ?></td>
    <td><?php echo $trow->price; ?></td>
    </tr> 
    <?php endforeach; ?>
</tbody>
</table>";


$message .="Please fill out these surveys below to tell us how your         experience was with our company.";

$from_name="from name";
$from = "from@email.address";

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host ="mailhost";
$mail->Port =25;
$mail->SMTPAuth = false;
$mail->Username="mailboxsendingmessage";
$mail->Password="passwordforsendingmailbox";
$mail->FromName=$from_name;
$mail->From=$from; 
$mail->AddAddress($to, $to_name);
$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body = $message; 

$result = $mail->Send();
echo $result ? 'Sent' : 'Error';
$mailsend = NULL;
$mailsend = $result;

echo "$mailsend";

编辑:添加了我的php邮件代码。

3 个答案:

答案 0 :(得分:0)

我发现这种方式令人困惑,我总是喜欢heredoc 这就是我通常做的事情:

<thead>
    <tr>
        <th>Item Name</th>
        <th>SKU Number</th>
        <th>Price</th>
    </tr>
</thead>
<tbody>
<?php

foreach($stuff as $trow){
echo <<< LOL
<tr> 
<td>{$trow->$name}</td>
<td>{$trow->$sku}</td>
<td>{$trow->$price}</td>
</tr> 
LOL;
}

?>
</tbody>

您最终会减少代码,从而减少错误。

答案 1 :(得分:0)

您可以像这样使用HTML

    $message .='<table border="1">
<thead>
    <tr>
        <th>Item Name</th>
        <th>SKU Number</th>
        <th>Price</th>
    </tr>
</thead>
<tbody>';

    <?php foreach($stuff as $trow) { ?>

    $message .='<tr>
    <td>'.$trow->name.'</td>
    <td>'.$trow->sku.'</td>
    <td>'.$trow->price.'</td>
    </tr>'; 
    <?php } ?>
$message .='</tbody>
</table>';

答案 2 :(得分:0)

使用附加代码,问题变得清晰。

您正在将PHP语句插入到字符串中,然后在电子邮件中发送该字符串。如果您查看该电子邮件的来源,您可能会看到未执行的PHP代码。

您无法在字符串内插入foreach循环。相反,您需要使用循环逐步构建字符串,例如

$message .="<table border=\"1\">
<thead>
    <tr>
        <th>Item Name</th>
        <th>SKU Number</th>
        <th>Price</th>
    </tr>
</thead>
<tbody>";

foreach($stuff as $trow) :
    $message .= "<tr>
    <td>".$trow->name."</td>
    <td>".$trow->sku."</td>
    <td>".$trow->price."</td>
    </tr>";
endforeach;
$message .= "</tbody>
</table>";