PHPMailer传递PHP变量生成的URL链接无法点击问题求助
PHPMailer发送邮件链接无法点击修复方案
核心问题原因
- 错误将带HTML标签的内容同时赋值给了
AltBody:AltBody是给不支持HTML的邮件客户端使用的纯文本内容,直接放HTML标签会被当成纯文本展示,不会解析为可点击链接 - 变量插值存在语法隐患:
href属性用单引号包裹、变量没有明确插值边界,可能导致部分邮件客户端无法正确识别链接地址 - 变量使用错误:
$reciever@gmail.com写法不规范,变量和邮箱后缀拼接逻辑错误,同时reciever为拼写错误,正确拼写为receiver
修正后完整代码
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // 加载Composer自动加载文件 require 'vendor/autoload.php'; // 实例化PHPMailer,传true开启异常捕获 $mail = new PHPMailer(true); $site = 'http://example.com'; $user_id = 100; // 修正接收邮箱变量的拼写和拼接逻辑 $receiver = 'ann@gmail.com'; // 单独编写HTML版本正文,变量用大括号包裹明确插值范围,href用双引号包裹 $html_msg = "请点击下方链接:<br><br> <a href=\"{$site}/link1.php?id={$user_id}\">链接1</a><br><br> <a href=\"{$site}/link2.php\">链接2</a>"; $html_body = "以下是你需要的内容:{$html_msg}"; // 单独编写纯文本版本正文,不要带任何HTML标签 $plain_body = "请点击下方链接:\n\n 链接1地址:{$site}/link1.php?id={$user_id}\n 链接2地址:{$site}/link2.php"; // 此处保留你原有PHPMailer服务器配置即可 $mail->setFrom('henry@mysite.com', "Henry Good"); $mail->addAddress($receiver, 'Ann Ball'); $mail->isHTML(true); // 开启HTML格式解析 $mail->Subject = '我的邮件主题'; $mail->Body = $html_body; // HTML版本内容赋值给Body参数 $mail->AltBody = $plain_body; // 纯文本版本内容赋值给AltBody参数 $sent = $mail->send();
额外注意事项
- 生产环境建议将站点域名升级为HTTPS协议,部分邮件客户端会拦截HTTP协议的链接
- 测试时可先发送到主流邮箱验证可用性,若链接被屏蔽可将域名加入邮箱白名单测试
内容的提问来源于stack exchange,提问作者Nancy Moore
相关产品推荐
相关产品推荐

