所以我试图通过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邮件代码。
答案 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>";