
php代码无法在html邮件正文中直接执行,必须先在服务器端完成数据库查询和html拼接,再将生成的纯html字符串作为邮件内容发送。
php代码无法在html邮件正文中直接执行,必须先在服务器端完成数据库查询和html拼接,再将生成的纯html字符串作为邮件内容发送。
在使用 mail() 函数发送HTML邮件时,一个常见误区是:试图将包含PHP语法(如 )的代码片段直接写入 $message 字符串中,期望收件人的邮箱客户端能“运行”这些PHP代码——这是完全不可行的。电子邮件不是Web页面,邮件客户端(如Outlook、Gmail等)只渲染静态HTML/CSS,绝不执行任何PHP、JavaScript或服务器端逻辑。
正确的做法是:所有PHP逻辑(数据库连接、查询、循环)必须在发送前由你的PHP脚本完整执行完毕,最终 $message 变量中只应包含已解析完毕的纯HTML字符串。
以下是重构后的安全、可运行示例:
<?php try {
$to = 'recipient@example.com';
// 1. 建立数据库连接并执行查询(务必确保 database.php 正确初始化 $conn)
include_once "database.php";
$result = mysqli_query($conn, "SELECT id, UPPER(make) AS make_name FROM makes ORDER BY make_name");
if (!$result) {
throw new Exception('Database query failed: ' . mysqli_error($conn));
}
// 2. 构建完整的HTML邮件正文(纯字符串,无PHP标签)
$message = '<!DOCTYPE html><meta charset="iso-8859-1"><title>Delete employee data</title><style>
table { border-collapse: collapse; width: 100%; }
th, td { padding: 8px; text-align: left; border: 1px solid #ddd; }
tr:nth-of-type(odd) { background-color: #f9f9f9; }
</style><h2>Makes List</h2>
| Make |
|---|
| {$make} |
â å ³é®è¦ç¹æ»ç»ï¼
- â ææ includeãmysqli_queryãwhile 循ç¯å¿ é¡»å¨ $message åç¬¦ä¸²æ¼æ¥ä¹åæä¹ä¸æ§è¡ï¼èéåå¨å符串éï¼
- â ä½¿ç¨ mysqli_fetch_assoc() æ¿ä»£ mysqli_fetch_array() æ´è¯ä¹æ¸ æ°ï¼å¹¶æ³¨æå段å«åï¼å¦ UPPER(make) AS make_nameï¼ï¼
- â 对è¾åºæ°æ®è°ç¨ htmlspecialchars() 鲿¢XSSä¸HTMLè§£æé误ï¼å°¤å ¶å½æ°æ®å« çå符æ¶ï¼ï¼
- â é®ä»¶HTML建议使ç¨å èCSSï¼å¤æ°é®ç®±å®¢æ·ç«¯ä¸æ¯æå¤é¨æ ·å¼è¡¨æ
- â åå¿å¨ $message ä¸ä¿ç æ ç¾ââå®ä»¬ä¼è¢«å½ä½æ®éææ¬æ¾ç¤ºï¼èéæ§è¡ã
éµå¾ªæ¤æ¨¡å¼ï¼ä½ å°±è½ç¨³å®å°åç¨æ·åéå«å¨ææ°æ®çHTMLé®ä»¶ã
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











