如何在PHP中使用PHPMailer向Gmail发送原始HTML代码且不被渲染
解决方法
问题原因
你开启了PHPMailer的HTML邮件模式,且直接将未做转义的HTML代码作为邮件内容传入,Gmail会将这部分内容识别为HTML结构进行渲染,因此不会展示原始代码。
操作步骤
- 对要展示的原始代码做HTML实体转义,使用PHP内置的
htmlspecialchars()函数将<、>、双引号等特殊字符转换为HTML实体,避免被邮件客户端解析为标签。 - 将转义后的代码用
<pre><code>标签包裹,保留代码的换行、缩进格式,也可添加内联样式提升可读性。 - 也可直接关闭HTML邮件模式,直接发送纯文本内容,不过这种方式无法添加额外的排版格式。
修改后的代码示例
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $email_subject='my codes'; $recipient_email='reciever@gmail.com'; $recipient_name='Ann'; $sender_name='john'; // 原始待展示的代码 $original_code = "<html> <script> alert('This is your Code'); </script> <body><p> <b>Display as raw codes.</b> </p> </body> </html>"; // 转义代码中的特殊HTML字符 $escaped_code = htmlspecialchars($original_code, ENT_QUOTES); // 拼装邮件HTML内容 $mail_body = <<<HTML <pre style="background: #f5f5f5; padding: 15px; border-radius: 4px; overflow-x: auto;"> <code>$escaped_code</code> </pre> HTML; require 'vendor/autoload.php'; $mail = new PHPMailer(true); try { // 服务端配置保持不变 $mail->setFrom('nancy@gmail.com', $sender_name); $mail->addAddress($recipient_email, $recipient_name); $mail->isHTML(true); $mail->Subject = $email_subject; $mail->Body = $mail_body; // 适配不支持HTML的邮件客户端 $mail->AltBody = $original_code; $mail->send(); echo 'Message successfully sent'; } catch (Exception $e) { echo "Message not sent. Error: {$mail->ErrorInfo}"; } ?>
如果不需要任何HTML排版,只想纯文本展示代码,直接修改配置即可:
// 关闭HTML模式 $mail->isHTML(false); $mail->Body = $original_code;
内容的提问来源于stack exchange,提问作者Nancy Moore
相关产品推荐
相关产品推荐

