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

PHP邮件发送至mail.bg/abv.bg出现乱码问题求助

解决mail.bg/abv.bg邮箱接收PHP邮件乱码问题

问题分析

你遇到的乱码(显示为РќРѕРІРѕ,实际应为Ново)核心原因是邮件编码声明与实际传输格式不匹配,加上headers格式错误:

  • 邮件headers声明了Content-Transfer-Encoding: base64,但正文未做base64编码,mail.bg/abv.bg这类严格遵循协议的邮箱会按base64规则解析明文UTF-8,导致乱码;Gmail容错性较强,自动识别了真实编码
  • 代码中多余的header('Content-Transfer-Encoding: base64');是网页响应头,和邮件发送逻辑无关
  • 邮件headers存在错误的换行格式(\n\r\n),可能导致邮箱服务器解析headers异常

解决步骤

1. 移除多余的HTTP响应头

删除与邮件发送无关的网页响应设置:

// 删除此行
header('Content-Transfer-Encoding: base64');

2. 修正邮件headers的换行格式

所有邮件headers的换行统一使用\r\n,确保每个header项后正确换行:

$headers = "From: $myemail\r\n"; 
$headers .= "Reply-To: $email_address\r\n"; // 添加\r\n保证换行
$headers .= 'Content-Type: text/plain; charset=utf-8' . "\r\n";
$headers .= 'Content-Transfer-Encoding: base64' . "\r\n"; // 修正错误换行格式

3. 对邮件正文进行base64编码

因为headers声明了base64传输编码,必须将正文转换为对应格式:

// 对邮件正文执行base64编码
$email_body = base64_encode("You have received a new message. ".
    " Here are the details:\n Name: $name \n Email: $email_address \n Message \n $message");

修改后的完整代码

<?php 
header('Content-Type: text/html; charset=utf-8');
$errors = '';
$myemail = 'example@mail.bg';//<-----Put Your email address here.
if(empty($_POST['name'])  || 
   empty($_POST['email']) || 
   empty($_POST['message']))
{
    $errors .= "\n Error: all fields are required";
}

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['message']; 
$subject = $_POST['subject'];


if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
$email_address))
{
    $errors .= "\n Error: Invalid email address";
}

if( empty($errors))
{
    $to = $myemail; 
    $email_subject = "$subject, $name";
    // 对邮件正文进行base64编码
    $email_body = base64_encode("You have received a new message. ".
    " Here are the details:\n Name: $name \n Email: $email_address \n Message \n $message"); 
    $headers = "From: $myemail\r\n"; 
    $headers .= "Reply-To: $email_address\r\n";
    $headers .= 'Content-Type: text/plain; charset=utf-8' . "\r\n";
    $headers .= 'Content-Transfer-Encoding: base64' . "\r\n";
    mail($to, '=?utf-8?B?'.base64_encode($email_subject).'?=', $email_body, $headers);

    //redirect to the 'thank you' page
    header('Location: contact-form-thank-you.html');
} 
?>

补充方案

如果不想使用base64编码,也可以将Content-Transfer-Encoding改为quoted-printable,同时用quoted_printable_encode()处理正文,同样能解决UTF-8编码在严格协议邮箱的显示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:40:20