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
相关产品推荐
相关产品推荐

