PHP使用mail()函数发送邮件时如何给文本添加下划线或加粗
解决PHP mail()函数邮件格式化无效的问题
Hey Lars, let's break down why your formatting attempts weren't working and get this sorted!
为什么之前的写法没用?
PHP的mail()函数默认发送的是纯文本邮件——不管你用下划线标记、非标准的(u)/(strong),还是把HTML标签用括号括起来,这些都会被当作普通的字符串显示,邮件客户端根本不会把它们解析成格式效果。
可行的解决方案:发送HTML格式邮件
要让邮件支持加粗、下划线这类格式,你需要告诉邮件客户端这是一封HTML邮件,具体要做两件事:
- 在邮件头里设置
Content-Type: text/html(同时指定编码避免乱码) - 使用标准的HTML标签来做格式化(比如
<strong>/<b>加粗,<u>下划线)
基础示例代码
// 配置邮件基本信息 $to = 'recipient@example.com'; $subject = 'Your Updated Mail with Formatting'; // 编写带HTML格式的邮件内容 $message = '<div> <p><strong>Posted By:</strong> 这部分文字会被加粗</p> <p><u>这条内容会显示下划线效果</u></p> </div>'; // 设置关键的邮件头,开启HTML支持 $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n"; // 可选:添加发件人信息 $headers .= 'From: Your Name <your_email@example.com>' . "\r\n"; // 发送邮件 mail($to, $subject, $message, $headers);
进阶:兼容纯文本客户端(可选)
有些用户的邮件客户端可能默认只显示纯文本,或者把HTML邮件标记为垃圾。如果你想兼顾两种格式,可以发送多部分MIME邮件,同时提供纯文本和HTML版本:
$to = 'recipient@example.com'; $subject = 'Dual-Format Mail'; // 定义一个唯一的边界符(用于分隔不同格式的内容) $boundary = uniqid('email_boundary'); // 设置多部分MIME的邮件头 $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/alternative; boundary=" . $boundary . "\r\n"; $headers .= 'From: Your Name <your_email@example.com>' . "\r\n"; // 纯文本版本(给不支持HTML的客户端) $text_content = "Posted By: 纯文本内容\n这条没有格式的备份内容"; // HTML版本(带格式) $html_content = '<p><strong>Posted By:</strong> 加粗的HTML内容</p><p><u>带下划线的文字</u></p>'; // 组装邮件内容 $message = "--" . $boundary . "\r\n"; $message .= "Content-Type: text/plain; charset=UTF-8\r\n"; $message .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $message .= $text_content . "\r\n\r\n"; $message .= "--" . $boundary . "\r\n"; $message .= "Content-Type: text/html; charset=UTF-8\r\n"; $message .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $message .= $html_content . "\r\n\r\n"; // 结束边界符 $message .= "--" . $boundary . "--"; // 发送邮件 mail($to, $subject, $message, $headers);
小提示
- 尽量使用标准HTML标签:
<strong>(语义化加粗)或<b>(样式加粗)、<u>(下划线)都是邮件客户端广泛支持的标签。 - 别忘了设置
charset=UTF-8,避免中文或特殊字符出现乱码。
内容的提问来源于stack exchange,提问作者Lars Bratt
相关产品推荐
相关产品推荐

