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

PHP网站邮件表单发送至Outlook时日文乱码问题求助

解决PHP邮件表单Outlook日文乱码问题

Outlook对邮件编码的解析逻辑和Gmail存在差异,核心问题出在邮件头编码不规范和多字节字符处理不足上,以下是针对性的修改方案:


1. 强制统一UTF-8编码的邮件头

Outlook需要明确指定编码类型和传输格式,quoted-printable编码对日文兼容更好,替换原有模糊的头配置:

$headers = "MIME-Version: 1.0\r\n";
// 明确UTF-8编码+quoted-printable传输格式
$headers .= "Content-Type: text/plain; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n";

如果是HTML格式邮件,将text/plain改为text/html; charset=utf-8即可。

2. 按RFC标准编码邮件主题

直接传递日文主题会被Outlook解析错误,必须用mb_encode_mimeheader做RFC 2047标准编码:

$subject = "お問い合わせ内容確認";
// 用Q编码处理UTF-8主题,适配Outlook
$encoded_subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q', "\r\n");

3. 编码含日文的发件人名称

如果发件人名称包含日文,同样需要编码后再放入邮件头:

$sender_name = "会社お問い合わせフォーム";
$encoded_sender = mb_encode_mimeheader($sender_name, 'UTF-8', 'Q') . " <noreply@yourdomain.com>";
$headers .= "From: " . $encoded_sender . "\r\n";

4. 改用mb_send_mail替代原生mail函数

原生mail函数对多字节字符支持有限,启用mbstring扩展后用mb_send_mail更稳定:

// 发送邮件到公司Outlook邮箱
mb_send_mail(
    "TestOulookMailBox.info@test.net",
    $encoded_subject,
    $user_submitted_content,
    $headers,
    '-f noreply@yourdomain.com' // 指定发件人地址,避免被判定为垃圾邮件
);

// 发送确认邮件给用户
$confirm_subject = mb_encode_mimeheader("お問い合わせ受付完了", 'UTF-8', 'Q');
$confirm_content = "お問い合わせありがとうございます。確認後、順次ご連絡いたします。";
mb_send_mail($user_email, $confirm_subject, $confirm_content, $headers);

完整可运行示例

// 封装邮件发送函数
function send_utf8_mail($to, $subject, $content, $reply_to = '') {
    // 编码主题
    $encoded_subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q', "\r\n");
    
    // 构建标准头
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/plain; charset=utf-8\r\n";
    $headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
    
    // 编码发件人
    $sender_name = "お問い合わせフォーム";
    $encoded_sender = mb_encode_mimeheader($sender_name, 'UTF-8', 'Q') . " <noreply@yourdomain.com>";
    $headers .= "From: " . $encoded_sender . "\r\n";
    
    if (!empty($reply_to)) {
        $headers .= "Reply-To: " . $reply_to . "\r\n";
    }
    
    // 发送邮件
    return mb_send_mail($to, $encoded_subject, $content, $headers, '-f noreply@yourdomain.com');
}

// 调用示例(假设表单提交的字段为email和message)
$company_mail = "TestOulookMailBox.info@test.net";
$user_email = $_POST['email'];
$user_message = $_POST['message'];

// 发送到公司邮箱
send_utf8_mail($company_mail, "新規お問い合わせ", $user_message, $user_email);

// 发送用户确认邮件
send_utf8_mail($user_email, "お問い合わせ受付確認", "お問い合わせ内容を受け付けました。近日中にご連絡します。");

注意事项

  • 确保PHP环境已启用mbstring扩展(可通过phpinfo()查看);
  • 测试时优先发送到自己的Outlook邮箱验证编码;
  • 若邮件内容含HTML标签,需同步修改Content-Type为text/html; charset=utf-8。

内容的提问来源于stack exchange,提问作者D. Rico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:40:10