You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用mail()函数发送含á、é字符的HTML邮件失败求助

PHP mail() 同时包含á和é时无法发送邮件的解决方案

问题根源

原生mail()函数处理包含特定多字节字符(如同时存在á和é)的HTML内容时,常因头信息换行符不规范或内容未按邮件标准编码导致发送失败,即便设置了UTF-8 charset也可能触发兼容性问题。

最优解决方案

1. 修正头信息换行符

邮件协议强制要求头信息使用\r\n(CRLF)作为换行符,而非单个\n,否则邮件服务器可能解析头信息出错。

2. 对HTML内容进行Quoted-Printable编码

使用quoted_printable_encode()将HTML内容转换为符合邮件传输标准的格式,同时在Content-Type头中声明编码方式,确保特殊字符在传输过程中不被损坏或触发服务器过滤规则。

修改后的完整代码

$name = "áé";
$email = "something@gmail.com";
$subject = "测试邮件"; // 补充缺失的主题变量

$htmlContent = '
<!DOCTYPE html>
<html lang="hu">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <h3>Dear ' . $name . '!</h3>
</body>
</html>
';

// 对HTML内容进行Quoted-Printable编码
$encodedContent = quoted_printable_encode($htmlContent);

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type:text/html;charset=UTF-8;encoding=quoted-printable\r\n";
$headers .= "From: 发件人 <sender@example.com>\r\n";
$headers .= "Reply-To: 回复邮箱 <reply@example.com>\r\n";

if (mail($email, $subject, $encodedContent, $headers)) {
    echo "邮件发送成功";
} else {
    echo "邮件发送失败";
}

额外建议

如果原生mail()仍存在兼容性问题,推荐使用PHPMailer或SwiftMailer这类专业邮件库,它们会自动处理编码、头信息规范和邮件传输细节,彻底避免这类底层问题,且代码更易维护。

内容的提问来源于stack exchange,提问作者user15563812

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:29:55