HTML邮件中嵌入PHP代码无数据显示问题求助
解决HTML邮件中PHP代码不执行的问题
你当前的写法是把PHP代码直接嵌入到$message字符串里,这些代码不会被服务器执行——邮件发送时,服务器只会把这段PHP代码当成普通文本(或者被HTML解析器忽略),自然不会显示数据库查询的结果。要让邮件显示数据库数据,得先执行PHP逻辑拿到数据,再把数据渲染成HTML内容。
修改后的代码示例
<?php try{ $to = "info@info.co.za"; $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: text/html; charset=iso-8859-1'; // 先执行数据库查询,拿到数据 include_once "database.php"; $result = mysqli_query($conn,"SELECT id,upper(make) FROM makes order by upper(make)"); // 开始构建邮件的HTML内容 $message = '<html><head>'; // 注意:邮件客户端大多不支持外部CSS文件,建议把样式写内联或内部<style> $message .= '<style> tr:nth-of-type(odd) { background-color:#ccc; } </style>'; $message .= '<title>Delete employee data</title></head><body>'; $message .= '<table>'; // 循环渲染数据库数据到表格 $i=0; while($row = mysqli_fetch_array($result)) { $message .= '<tr>'; $message .= '<td style="width: 300px; text-align: center;">' . $row["upper(make)"] . '</td>'; $message .= '</tr>'; $i++; } $message .= '</table></body></html>'; $response = mail($to, 'Query from website', $message, implode("\n",$headers)); print_r($response); } catch(Exception $e){ print_r($e); } ?>
关键改动说明
- 把数据库查询逻辑从
$message字符串中移出来,提前执行并拿到数据 - 循环遍历查询结果,把每一行数据直接拼接到HTML表格的代码中
- 移除了外部CSS链接(邮件客户端基本不会加载外部样式文件),保留内部
<style>样式(部分客户端支持,如需更好兼容性建议把样式内联到每个HTML标签)
内容的提问来源于stack exchange,提问作者Jurie Schoeman
相关产品推荐
相关产品推荐

