PHP发邮件至Outlook时希腊字母Δ显示异常的解决方法咨询
解决PHP mail函数发送含希腊字母邮件到Outlook的乱码问题
你的问题核心是编码不匹配:PHP默认mail()函数会用ISO-8859-1编码发送邮件,而希腊字母Δ属于UTF-8字符,Outlook未被明确告知编码时会用默认编码解析,导致乱码显示为Î"。以下是可行的解决方法:
1. 强制设置UTF-8编码的邮件头
在邮件头中明确指定Content-Type的字符集为UTF-8,这是最直接有效的方案:
$to = '收件人邮箱@example.com'; $subject = 'Δ request and Δ fault'; $message = 'Δ request and Δ fault must be....'; // 构建包含编码声明的邮件头 $headers = "MIME-Version: 1.0\r\n"; // 纯文本邮件用text/plain,HTML邮件替换为text/html $headers .= "Content-Type: text/plain; charset=utf-8\r\n"; $headers .= "From: 发件人邮箱@example.com\r\n"; // 发送邮件 mail($to, $subject, $message, $headers);
2. 确保邮件内容本身是UTF-8编码
- 保存你的PHP文件时,选择UTF-8无BOM格式,避免文件本身编码导致字符提前乱码;
- 如果内容来自数据库,确保数据库连接、数据表字段的编码均为UTF-8(如utf8mb4),从源头保证字符编码正确。
3. 用mb_send_mail替代原生mail函数(可选)
PHP的mbstring扩展提供的mb_send_mail对多字节字符支持更好,适合处理非ASCII字符:
// 初始化多字节编码设置 mb_language('uni'); mb_internal_encoding('UTF-8'); $to = '收件人邮箱@example.com'; // 对主题进行MIME编码,避免特殊字符在主题栏乱码 $subject = mb_encode_mimeheader('Δ request and Δ fault', 'UTF-8'); $message = 'Δ request and Δ fault must be....'; $headers = "From: 发件人邮箱@example.com\r\n"; mb_send_mail($to, $subject, $message, $headers);
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

