質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1242閲覧

mb_send_mail()関数の文字化けを直したい

karibe

総合スコア2

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/11/14 07:35

実現したいこと

mb_send_mail()関数にて送信したメールをoutlookで受け取った場合に文字化けしていることがあるので修正したい。

前提

環境
OS Almalinux8.0
PHP 8.2.10
メールサーバー postfix

PHPにて自動メール送信機能をmb_send_mail()関数にて実装したのですが一部のoutlookにて受信した場合に文字化けしているようでした。
こちらとしてはutf-8で送信しているのですが、受信側ではシフトJISで表示しているようです。

メール送信側でutf-8とシフトJIS両方対応することは可能でしょうか

該当のソースコード

PHP

1 $subject = "タイトル"; 2 $body = "本文"; 3 $to = "mail@example.com"; 4 $headers = "From: AAA株式会社<webmail@example.co.jp>"; 5 $headers .= "\r\n"; 6 mb_send_mail($to, $subject, $body, $headers);

試したこと

下記のサイトを参考にプログラムを修正してみましたが、今度はGmailにて受信した場合に文字化けしてしまいました。
https://office-obata.com/report/memorandum/post-5300/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/11/14 07:52

届いた先でのメールヘッダのContent-Typeはどうなっていますか?
karibe

2023/11/14 08:08 編集

ありがとうございます。 送信先のお客様にお伺いしたのですが、そのあたりの知識が曖昧らしく説明しても記載されている場所が分からないと言われてしまっております。現状メーラーがoutlookだということしか判明しておりませんので、バージョンもわからず、こちらで同じ環境を用意して確認するということも不可能な状態です。
karibe

2023/11/14 08:21 編集

Gmailで受信した場合は以下になります。 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: BASE64
ikedas

2023/11/14 08:28

送信されたメールのヘッダを (デコードなどせずに) そのまま見せていただけますか (gmailでは「メッセージのソースを表示」で見れます)。ヘッダ中に現れるIPアドレスやドメイン名はマスクしてかまいません。
otn

2023/11/14 08:31

送信側で付けるヘッダなので、Gmailで受信してもOutlookでも同じです。 みたところ、問題ないですね。 Outlook側の環境が原因でしょうから、Outlookのバージョンや設定を確認して、同じ環境で確認するしかないかと思います。
ikedas

2023/11/14 08:32

> gmailでは「メッセージのソースを表示」で見れます 訂正。「メッセージのソースを表示」で出てくる画面の「元のメールをダウンロード」をクリックし、ダウンロードした○○.emlというファイルをテキストエディタで開くと、デコードされていないメールのヘッダが見れます (単にダブルクリックしたりして開くとメールソフトで開かれてしまったりしてヘッダが見れないので注意)。
ikedas

2023/11/14 08:39

あと「文字化けしているよう」だけではどうなっているのか見当がつかないので、スクリーンショットなどがあるとよいですね。現時点では何が文字化けしているのか (本文なのかヘッダの内容なのか) もわからないです。
karibe

2023/11/14 08:46

メールのヘッダーの全文は以下になります。(本文はすべて削除しました) スクリーンショットについては、送信していただくよう依頼いたしました。受け取り次第掲載させていただきます。 Delivered-To: ■■■■■■■■■■■ Received: by ■■■■■■■■■■■ Mon, 13 Nov 2023 22:31:06 -0800 (PST) X-Received: ■■■■■■■■■■■ Mon, 13 Nov 2023 22:31:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699943465; cv=none; d=google.com; s=arc-20160816; b=B+1DQquCJ1x5PsX+lBj8evJKhGph1MSIV4d1+iTZN1ExODm/WnUAwr/VuZUvK8IoL8 WJwvzpvav648EtXbAnkZrWDFDrOUh2WBYsv1+gfvlGTuW/NLM24Wpfo7ZVrJetBGJbS+ LWg2flkxOiYKttRFCxwrWFYaurfuZjcVumCq79kHRDr/C3sDDBDlwwFLOy8Hs9JK4XQa c4icUPO8kdAjUWJtXb7BdiPVfuGqlTkwb7BrMPrnN/Rl/eDW1v8UcWtUUbfL5GViMQcD l9wbgwTv/r+WTKzeUj4QwzgfpfDzCD9hhlLKFagtv4f26D6NXwbJ4QXWqoabE7beDQfk ScaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-transfer-encoding:reply-to:subject:to :message-id:date:from:dkim-signature; bh=AyjyUhfT0k8zCuELpMDu2HemdvCOwdWjqnSjUlTIOMQ=; fh=ff/2vlzMWhomYzlUVODhIaxMflxF4hR5dN4V56JPMyE=; b=BLm4X4Dw2t3JowAZ8CnKYUVCFTnIMam8PmG8mrnPyHrMhpbU1PkJxolRW6OHMg1ItJ ePubv35LQh1VJOAwOpkCvrRxOjZDFKT4aU24ZAgptoJ6YDiE13f4E811tnITjlCFWA5M Q9kGX2GYsIW5NIVrqjMWPSd3WkeaoaADb5P84BCIJignCOqGfC5ShLXyjx9pb1dO7Wjb JcutWBkHg8Q+FgXkCh9kSDGobA+/Sd2BVZCks005Zncty+7JLqnE8UVL62FdFZ8vA+Ld aN2g7LV5t4ZUM2wZE4mAvj0dK99QSl4ByimyXwEgWtrfU/ZDrqVyfQyOp83/DcNeW6ck 2gVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@■■■■■■■■■■■.20230601.gappssmtp.com header.s=20230601 header.b=VYftMYS4; spf=pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) smtp.mailfrom=■■■■■■■■■■■ Return-Path: <■■■■■■■■■■■> Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [■■■■■■■■■■■]) by mx.google.com with SMTPS id ■■■■■■■■■■■ for <■■■■■■■■■■■> (Google Transport Security); Mon, 13 Nov 2023 22:31:05 -0800 (PST) Received-SPF: pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) client-ip=■■■■■■■■■■■; Authentication-Results: mx.google.com; dkim=pass header.i=@■■■■■■■■■■■.20230601.gappssmtp.com header.s=20230601 header.b=VYftMYS4; spf=pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) smtp.mailfrom=■■■■■■■■■■■ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=■■■■■■■■■■■.20230601.gappssmtp.com; s=20230601; t=1699943464; x=1700548264; darn=■■■■■■■■■■■; h=mime-version:content-transfer-encoding:reply-to:subject:to :message-id:date:from:from:to:cc:subject:date:message-id:reply-to; bh=AyjyUhfT0k8zCuELpMDu2HemdvCOwdWjqnSjUlTIOMQ=; b=VYftMYS4dJpQf7MuyyJ8QrKDErPSwjcqwJFJ/GohrJ+4cg2kO/gM40pCN+sO1tdUlj mVhDxKTZZ9ryUJqciykE4GNfl9oicrnvKhtyZTRdXd2DA1w8WdJ7LiKiCQSLknFjcoHo MdXj4ovzkhq9MCj9tTfYuRFzUpUndHItAKYd/5ShmxbSK5AtOOLy4KWuUjz3dIDOioGw vG3B6X+wRiJqPKvSu4uuT3t2ZTnfccbwjdSCJjqc/F6I6kdKffFKVDcLAYPvxzM30Hqq iuWf8dpO710YTISLfdE6rOJTkfJZV6vNFRtMhNH5Wv2mJHksGILGwT8807VCO0puY52T rusw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699943464; x=1700548264; h=mime-version:content-transfer-encoding:reply-to:subject:to :message-id:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=AyjyUhfT0k8zCuELpMDu2HemdvCOwdWjqnSjUlTIOMQ=; b=nkB3o8I9auTpXmpeWx8E/E04XO1C1aVj7JGCRkaj9LQuHtwx9ZNLNNH06+yMZBgx3O 8zYQvHi0wt++8OX9DGqB3xDybWCAKSWVpbaq8S914R14mZk3bcTh5wpa9K+pAiiAY7z3 UUPYRNpiWGLW+PSPxoi91K5qqsj92XfXO3rls85QZTAcB0lg98I5TjjGRxiKU71Zxnd5 6w1fPsDLPscaeo4DAGwDb/hE/ynlQPVIKn09Kq2+ln4qhtsVE7ErgsHrZ2sy3mLbgXSk NTaIu7zUB3yeWcX1G6z8yym1nhVi5IGLm4AvnAW8mRv242yFTLffSFKKwFdfzFTwFyeW eEkg== X-Gm-Message-State: AOJu0YwW/+8o9IlhL72wZHBLxJvOlMzQkBJr3pWS7iCgLf+flWmUWYN0 Ox6GCpilJ7OYSeYEOCe0tUEF5Y8ih4V1E4b+bXUvFg== X-Google-Smtp-Source: AGHT+IGUWE/fbODGHTQWgydoeAi9HJr2oG3Dfw3/587O3XxgPNphKgKVPJQsM/e4stoAH6+Z98/tbA== X-Received: ■■■■■■■■■■■ Mon, 13 Nov 2023 22:31:04 -0800 (PST) Return-Path: <■■■■■■■■■■■> Received: from ■■■■■■■■■■■ by ■■■■■■■■■■■ for <■■■■■■■■■■■> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 22:31:03 -0800 (PST) From: ■■■■■■■■■■■ X-Google-Original-From: =?UTF-8?B?5Y2X5rW344OX44Op44Kk44Km44OD44OJ5qCq5byP5Lya56S+?=&lt@■■■■■■■■■■■;, ■■■■■■■■■■■&gt;; Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by ■■■■■■■■■■■ (Postfix) with ESMTP id E3214D44 for <■■■■■■■■■■■>; Tue, 14 Nov 2023 15:31:01 +0900 (JST) Received: (from apache@localhost) by localhost.localdomain (8.15.2/8.15.2/Submit) id 3AE6V10d003465; Tue, 14 Nov 2023 15:31:01 +0900 Date: Tue, 14 Nov 2023 15:31:01 +0900 Message-Id: <202311140631.3AE6V10d003465@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: apache set sender to ■■■■■■■■■■■ using -f To: ■■■■■■■■■■■ Subject: =■■■■■■■■■■■ Content-Type: text/plain; charset=UTF-8 Reply-To: ■■■■■■■■■■■ Content-Transfer-Encoding: BASE64 MIME-Version: 1.0
karibe

2023/11/14 08:58

文字化けのスクリーンショットを投稿いたしました。
melian

2023/11/14 11:15

2017年に同様の現象が報告されていて(以下のURLの最後の投稿)、Outlook が受信メールの Content-Type を無視して PC ローカルの encoding で decode することがあるとのことです。 Strange behavior outlook encoding https://social.technet.microsoft.com/Forums/office/en-US/a95f373a-4e0a-4bf0-b6a6-b4c246b33051/strange-behavior-outlook-encoding?forum=outlook 受信側で Outlook の encoding を UTF-8 にしてから再度表示している様で、 it's been reported by many people, and Microsoft continues to ignore it... と締めくくられています。
ikedas

2023/11/14 23:08 編集

ヘッダですが、Subject,From,、Toについては「:」のあと8文字くらいまでマスクしないでもらえますか。そこまでなら具体的な内容は見えないと思います。 まあOutlookがおかしい場合もあるのでしょうがこれはGmailでも正しく表示されないでしょうね (むしろ配送拒否されなかったのが不思議)。 PHPで正しい形式のメールを出すのは難しいという実例になっちゃってますねえ。回答できたらしますがするとしてもしばらくかかります。
otn

2023/11/14 12:37 編集

>malianさん なるほど。おそらくそれですね。 Office付属のOutlookはインターネットメールと相性悪いというか、もともと独自システムのメール送受信機能だけだったのに後からインターネットメールの送受信機能(SMTP/POP/IMAP)を追加したので、木に竹を接いだような感じですね。対応当初よりは良くなっていると思いますが。 対応としては、エンコーディングを iSO-2022-JPにするとかでしょうか。 mb_language("ja");をあらかじめ実行してから送信すると ISO-2022-JP になります。
karibe

2023/11/14 23:48 編集

>ikedas様 若干マスクをはがしました。今のところGmail上では正しく送信できているのですが、これは偶々うまくいってるだけの可能性があるのですね・・・。ほかにもYahooメール、thunderbirdにて正常に表示されるのを確認済みです。 Delivered-To: ■■■■■■■■■■■ Received: by ■■■■■■■■■■■ Mon, 13 Nov 2023 22:31:06 -0800 (PST) X-Received: ■■■■■■■■■■■ Mon, 13 Nov 2023 22:31:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699943465; cv=none; d=google.com; s=arc-20160816; b=B+1DQquCJ1x5PsX+lBj8evJKhGph1MSIV4d1+iTZN1ExODm/WnUAwr/VuZUvK8IoL8 WJwvzpvav648EtXbAnkZrWDFDrOUh2WBYsv1+gfvlGTuW/NLM24Wpfo7ZVrJetBGJbS+ LWg2flkxOiYKttRFCxwrWFYaurfuZjcVumCq79kHRDr/C3sDDBDlwwFLOy8Hs9JK4XQa c4icUPO8kdAjUWJtXb7BdiPVfuGqlTkwb7BrMPrnN/Rl/eDW1v8UcWtUUbfL5GViMQcD l9wbgwTv/r+WTKzeUj4QwzgfpfDzCD9hhlLKFagtv4f26D6NXwbJ4QXWqoabE7beDQfk ScaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-transfer-encoding:reply-to:subject:to :message-id:date:from:dkim-signature; bh=AyjyUhfT0k8zCuELpMDu2HemdvCOwdWjqnSjUlTIOMQ=; fh=ff/2vlzMWhomYzlUVODhIaxMflxF4hR5dN4V56JPMyE=; b=BLm4X4Dw2t3JowAZ8CnKYUVCFTnIMam8PmG8mrnPyHrMhpbU1PkJxolRW6OHMg1ItJ ePubv35LQh1VJOAwOpkCvrRxOjZDFKT4aU24ZAgptoJ6YDiE13f4E811tnITjlCFWA5M Q9kGX2GYsIW5NIVrqjMWPSd3WkeaoaADb5P84BCIJignCOqGfC5ShLXyjx9pb1dO7Wjb JcutWBkHg8Q+FgXkCh9kSDGobA+/Sd2BVZCks005Zncty+7JLqnE8UVL62FdFZ8vA+Ld aN2g7LV5t4ZUM2wZE4mAvj0dK99QSl4ByimyXwEgWtrfU/ZDrqVyfQyOp83/DcNeW6ck 2gVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@■■■■■■■■■■■.20230601.gappssmtp.com header.s=20230601 header.b=VYftMYS4; spf=pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) smtp.mailfrom=■■■■■■■■■■■ Return-Path: <■■■■■■■■■■■> Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [■■■■■■■■■■■]) by mx.google.com with SMTPS id ■■■■■■■■■■■ for <■■■■■■■■■■■> (Google Transport Security); Mon, 13 Nov 2023 22:31:05 -0800 (PST) Received-SPF: pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) client-ip=■■■■■■■■■■■; Authentication-Results: mx.google.com; dkim=pass header.i=@■■■■■■■■■■■.20230601.gappssmtp.com header.s=20230601 header.b=VYftMYS4; spf=pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) smtp.mailfrom=■■■■■■■■■■■ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=■■■■■■■■■■■.20230601.gappssmtp.com; s=20230601; t=1699943464; x=1700548264; darn=■■■■■■■■■■■; h=mime-version:content-transfer-encoding:reply-to:subject:to :message-id:date:from:from:to:cc:subject:date:message-id:reply-to; bh=AyjyUhfT0k8zCuELpMDu2HemdvCOwdWjqnSjUlTIOMQ=; b=VYftMYS4dJpQf7MuyyJ8QrKDErPSwjcqwJFJ/GohrJ+4cg2kO/gM40pCN+sO1tdUlj mVhDxKTZZ9ryUJqciykE4GNfl9oicrnvKhtyZTRdXd2DA1w8WdJ7LiKiCQSLknFjcoHo MdXj4ovzkhq9MCj9tTfYuRFzUpUndHItAKYd/5ShmxbSK5AtOOLy4KWuUjz3dIDOioGw vG3B6X+wRiJqPKvSu4uuT3t2ZTnfccbwjdSCJjqc/F6I6kdKffFKVDcLAYPvxzM30Hqq iuWf8dpO710YTISLfdE6rOJTkfJZV6vNFRtMhNH5Wv2mJHksGILGwT8807VCO0puY52T rusw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699943464; x=1700548264; h=mime-version:content-transfer-encoding:reply-to:subject:to :message-id:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=AyjyUhfT0k8zCuELpMDu2HemdvCOwdWjqnSjUlTIOMQ=; b=nkB3o8I9auTpXmpeWx8E/E04XO1C1aVj7JGCRkaj9LQuHtwx9ZNLNNH06+yMZBgx3O 8zYQvHi0wt++8OX9DGqB3xDybWCAKSWVpbaq8S914R14mZk3bcTh5wpa9K+pAiiAY7z3 UUPYRNpiWGLW+PSPxoi91K5qqsj92XfXO3rls85QZTAcB0lg98I5TjjGRxiKU71Zxnd5 6w1fPsDLPscaeo4DAGwDb/hE/ynlQPVIKn09Kq2+ln4qhtsVE7ErgsHrZ2sy3mLbgXSk NTaIu7zUB3yeWcX1G6z8yym1nhVi5IGLm4AvnAW8mRv242yFTLffSFKKwFdfzFTwFyeW eEkg== X-Gm-Message-State: AOJu0YwW/+8o9IlhL72wZHBLxJvOlMzQkBJr3pWS7iCgLf+flWmUWYN0 Ox6GCpilJ7OYSeYEOCe0tUEF5Y8ih4V1E4b+bXUvFg== X-Google-Smtp-Source: AGHT+IGUWE/fbODGHTQWgydoeAi9HJr2oG3Dfw3/587O3XxgPNphKgKVPJQsM/e4stoAH6+Z98/tbA== X-Received: ■■■■■■■■■■■ Mon, 13 Nov 2023 22:31:04 -0800 (PST) Return-Path: <■■■■■■■■■■■> Received: from ■■■■■■■■■■■ by ■■■■■■■■■■■ for <■■■■■■■■■■■> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 22:31:03 -0800 (PST) From: npweb@na■■■■■■■■■■■ X-Google-Original-From: =?UTF-8?B?5Y2X5rW344OX44Op44Kk44Km44OD44OJ5qCq5byP5Lya56S+?=&lt@■■■■■■■■■■■;, ■■■■■■■■■■■&gt;; Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by ■■■■■■■■■■■ (Postfix) with ESMTP id E3214D44 for <■■■■■■■■■■■>; Tue, 14 Nov 2023 15:31:01 +0900 (JST) Received: (from apache@localhost) by localhost.localdomain (8.15.2/8.15.2/Submit) id 3AE6V10d003465; Tue, 14 Nov 2023 15:31:01 +0900 Date: Tue, 14 Nov 2023 15:31:01 +0900 Message-Id: <202311140631.3AE6V10d003465@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: apache set sender to ■■■■■■■■■■■ using -f To: businessd■■■■■■■■■■■ Subject: =?UTF-8?B?44CQ5Y2X5rW344OX44Op44Kk44Km44OD?=■■■■■■■■■■■ Content-Type: text/plain; charset=UTF-8 Reply-To: npweb@na■■■■■■■■■■■ Content-Transfer-Encoding: BASE64 MIME-Version: 1.0 44OG44K544OI5qeYDQoNCg0K44GT44Gu5bqm44Gv44CB5byK56S+44Gu5Y+O57SN44OX44Op44Oz 44K744Os44Kv44OI44OE44O844Or44CM44GK5a6i5qeY44K144Od44O844OI44CN44KS44GU5Yip 55So44GE44Gf44Gg44GN44G+44GX44Gm44CB6Kqg44Gr44GC44KK44GM44Go44GG44GU44GW44GE ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
karibe

2023/11/14 23:52

>otn様 >malian様 ありがとうざいます。 他にも複数確認されている事例なのですね。iSO-2022-JPについては担当部署と一度協議して対応を決定したいと思います。
ikedas

2023/11/15 00:35

回答に書いた通りFromが不正な値になっていて、Gmailのほうで正しい (と思われる) アドレスに置き換えているようですね。置き換え前の値はX-Google-Original-Fromとして残してあるようです。
otn

2023/11/15 09:05

ikedasさんの回答で、Fromに生UTF-8を止めたところ解消したようなので、 malian さんの情報とも合わせて考えると、FromのUTF-8の8bit目の立った文字が来たので、 勝手にSJISと判断して、その後にあるContent-Typeヘッダのエンコーディング指定を無視したのでしょう。 mail() を使うか mb_send_mail() を使うかは本質的でなく、 日本語の含まれるヘッダをMIMEエンコーディングしているかどうかが問題です。 今回はおそらくContent-Typeヘッダより前に生UTF-8が来ていますが、 これが逆で先にContent-TypeヘッダでUTF-8であることを明示した後で生UTF-8が来たらどうなるかは確認してみたいところです。
ikedas

2023/11/15 09:58

生UTF-8であったかどうかは不明確です。 Gmailで「メッセージのソースを表示」で見るとヘッダがデコードされた状態で表示されるんですよね。デコード前のヘッダを見るには2023/11/14 17:32のコメントのような手順をふまないといけないようです。 あと、回答で述べたとおりmb_send_mail()は正しくエンコードできないので使うべきではないです。プログラマが自分で正しくエンコードするべきで、そうすると勝手にエンコードをしないmail()を使うことになります。両者の優劣の問題ではなく、前者がクズなだけです。
otn

2023/11/15 10:05

> 生UTF-8であったかどうかは不明確です。 Outlookに届いた時点でMIMEエンコードされていてMSBが立ってなければSJISと誤解釈されることはなかったはずなので、MSBが立っていたはずです。
ikedas

2023/11/15 10:09

Outlookのときについては、そのときのコードがどんなものであったかは質問から明確にわからないので、8ビット符号が混じっていた可能性も否定はできないですね。
otn

2023/11/16 09:33

ヘッダー情報は書かれていませんが、本文の化け状況から「SJISと誤判定された」ことはわかるので、「SJISと誤判定されるような理由があった」ことは明白です。 ケース1:Content-Type: text/plain; charset=UTF-8 が途中で charset=CP932 等に書き換わった ケース2:SJISと誤判定されるような文字があり、Outlookがそれを優先した の2択ですが、ケース1は非常に考えにくく、実際にPHPから出た時点でMSBの立った文字があった事実を考えると、ケース2でしょう。
otn

2023/11/16 09:40

使えるMicrosoft 365 Outlookがあったので、Fromに生UTF-8、本文はUTF-8のBASE64で送ってみましたが、From、本文共に化けませんでした。Fromはヘッダの先頭です。 OutlookでヘッダのFromを見ても日本語文字のまま見えます。Fromのの日本語をMIMEエンコードして送りヘッダのFromをみるとEncodeされたまま表示されるので、実は途中でエンコードされていて表示の時にデコードされているわけでは無いことが分かります。 ということで、Outlookだからといって一概に生UTF-8ヘッダが化けるわけでは無いようです。
guest

回答2

0

ベストアンサー

ご質問にある下記のコードでは正しい形式のメッセージは送れないと思います。

$subject = "タイトル"; $body = "本文"; $to = "mail@example.com"; $headers = "From: AAA株式会社<webmail@example.co.jp>"; $headers .= "\r\n"; mb_send_mail($to, $subject, $body, $headers);

まず、今どきUTF-8に対応していない (ISO-2022-JPしか読めない) MUAのことは考えなくていいでしょう。とりあえず当回答ではメッセージに使う文字コードはUTF-8決め打ちとします。また、以下にも述べますがmb_send_mail() にパラメータを放り込んだだけでは正しいメッセージになりませんのでmb_send_mail()は使わないほうがいいと思います。mail()を使います。

全てのコードを記載していませんので、抜けている部分は補ってください (動作確認していませんので、間違いがあれば指摘ください)。

ヘッダフィールド

例えば、上掲のコードだとFromヘッダフィールドの値が エンコードされた文字列@ドメイン名 のようになってしまっているはずです。フィールド値がまとめてエンコードされて一語になってしまい、MTAがドメイン名を補完したのだと考えられます (全体としてメールアドレスの形式にはなるので送信者ドメイン認証などは通ると思われる)。From、To、Ccなどのフィールドは構造化ヘッダフィールドなので値全体をまとめてエンコードしてはいけません。エンコードが必要な要素はエンコードし、他の要素と組み合わせてフィールド値とします。まじめにやるとこんな感じです (これでも問題が起きることはあるので後で若干手直しするかもしれません)。

$display_name = "AAA株式会社"; $address = "webmail@example.co.jp"; if (preg_match('/[^\x20-\x7E]/', $display_name)) { $encoded = mb_encode_mimeheader($display_name, "UTF-8", "B"); } elseif (preg_match('/["\\]/', $display_name)) { $encoded = '"' . preg_replace('/(["\\])/', '\\\1', $display_name) . '"'; } else { $encoded = '"' . $display_name . '"'; } $from_field = sprintf("%s <%s>", $encoded, $address);

Subjectについては全体をmb_encode_mimeheader()でエンコードすればいいと思います。

本文

mb_send_mail()ではmb_language()の値に基づいて適当に文字コード変換するので混乱の元です。今回はUTF-8決め打ちとしますので変換はしません。

本文については、今回はシングルパートでプレインテキストなので、8ビットのまま扱うか、適当な伝送エンコーディングをします。BASE64で伝送エンコーディングする場合、

$encoded_body = base64_encode($body);

メッセージの組み立て

各々の要素のエンコードができたら、メッセージを組み立てて送信します。MIME準拠のヘッダーフィールドも全部自分で指定します。

$headers = implode("\r\n", [ "From: " . $from_field, "MIME-Version: 1.0", "Content-Type: text/plain; Charset=UTF-8", "Content-Transfer-Encoding: BASE64" ]); mail($to_field, $subject_field, $encoded_body, $headers);

ひとまずこれで、通常なら正しく表示されるメッセージが送信できたはずです。これでも特定のMUAで文字化けなどがあるということでしたら、どんな状況なのかを改めて質問に追記ください。

投稿2023/11/15 00:17

編集2023/11/15 05:32
ikedas

総合スコア4443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karibe

2023/11/15 00:51

ありがとうございます。 一旦この路線で上司と相談させていただきます。
karibe

2023/11/15 02:11 編集

このようなヘッダーになりました。 お客様からも正常に表示されたと連絡がありました。(メーラーの設定を変更してもらったとも言っていたのでそちらの影響かもしれないのですが・・・・) ありがとうございました。 Delivered-To: ■■■■■■■■■■■ Received: by ■■■■■■■■■■■ Tue, 14 Nov 2023 17:50:01 -0800 (PST) X-Received: by ■■■■■■■■■■■ Tue, 14 Nov 2023 17:50:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700013001; cv=none; d=google.com; s=arc-20160816; b=s0NjKXbx5EbtR4Yb2WpbxX6zGlgGML7KDNiO6gHAMJcFFg79oJjZ3INpPag4nd0jI7 mFGFDNz8ya0UO17gHVjk4c2LnJqQyyeELCynqOtAld4cNDn29a6HPGeGoRD1VDNcGTYb 3wr7Kp5XRwcSItykZsXz9gwbpa9KsPwgzW6vq8+91dEgET/TOQJl3F+BFJMtjhpoXfub xiqQ8N3HSrX9QZTtN8TcZafMBJDQvNaEaqDK0DMIvwwtXhXjO52JH4qdw8/5KImXUIWT zjX7FeYl98sFu7eGthCOsYaxKWjkP9DPJSuLYkToP051VjTPruN8B16gQDTAMTZMmEik +52w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:from:subject:to:message-id :date:dkim-signature; bh=+FcqrLJZS/7FV3Nz8XPj+KEzF6ncUuxcSQaZ/goZ9qc=; fh=ff/2vlzMWhomYzlUVODhIaxMflxF4hR5dN4V56JPMyE=; b=pWFjXbGoMUweTf90ZLiguvC2H9YBL+5xTVDEuED09bhPMaP7WgSHs5pyKaELouqyWN IGD6EUFGHnlUxp9+7LSUescpVtOXXhjw9okneYBiea/7V8bm0SATT1KQCIRBFXa3IIPs qaN885HGMuEVpL79jH/9YIDFmy/eBTl8eH55PBdt5MK06dsr0JPLwl3fv91ntmfypqvm KdPp24OhWRK3Bm1l1DUoyMxhbp25AOhIoROtxcDC8dgJiFffTrFx5fkcegXGe1Sjwl7P Rh5Nx71/CJdF+728H+4gO2tu9MZRgxnI7a2wcj7BfsRJx7Ku+yN0h/3mOaRT/i9Li2gc mFdQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@■■■■■■■■■■■.gappssmtp.com header.s=20230601 header.b=wDQEdMPi; spf=pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) smtp.mailfrom=■■■■■■■■■■■ Return-Path: <■■■■■■■■■■■> Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [■■■■■■■■■■■]) by mx.google.com with SMTPS id jk4-20020a170903330400b001cc50146b64sor2197997plb.0.2023.11.14.17.50.01 for <■■■■■■■■■■■> (Google Transport Security); Tue, 14 Nov 2023 17:50:01 -0800 (PST) Received-SPF: pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) client-ip=■■■■■■■■■■■; Authentication-Results: mx.google.com; dkim=pass header.i=@■■■■■■■■■■■.20230601.gappssmtp.com header.s=20230601 header.b=wDQEdMPi; spf=pass (google.com: domain of ■■■■■■■■■■■ designates ■■■■■■■■■■■ as permitted sender) smtp.mailfrom=■■■■■■■■■■■ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=■■■■■■■■■■■.20230601.gappssmtp.com; s=20230601; t=1700013000; x=1700617800; darn=■■■■■■■■■■■ h=content-transfer-encoding:mime-version:from:subject:to:message-id :date:from:to:cc:subject:date:message-id:reply-to; bh=+FcqrLJZS/7FV3Nz8XPj+KEzF6ncUuxcSQaZ/goZ9qc=; b=wDQEdMPi7PBSAnwJmG0kDFoC5ue7M6qJGa/wQe1BiHFKIPyaTZS2mh2xpSVM+Ub0Sl fiS/fGRBQX33Ot5U2eI2JQqfwt9CNLps2CeaktDv6vg93iRZKhy5O68/zWNcGTxcH1rQ LrbHGy8166cIbgqqcJwcz5fgPPmYEiCHuJepPftM2jvtqWi324llf8MLak4FEbvKVbdO 8D+UR1pYNSjaNdGX0W743EQbV4Cx0HzF4BBJnsJHl508IWcah/zLOp4F4aMCcgRw0Hti Q1M8DmIdIR/tNmHzsDJg8tz/NycPeC4BN5t4ZesXPzDj1NBpg290ONfMu1cabF/69QBn SO1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700013000; x=1700617800; h=content-transfer-encoding:mime-version:from:subject:to:message-id :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+FcqrLJZS/7FV3Nz8XPj+KEzF6ncUuxcSQaZ/goZ9qc=; b=V30VMuE8cjhJL11NDKuxPsV62jWTY6XS7JUNIPatp17dQJTKLPxMW3mC0qn52fNV4Z PeN7MjD5e/O8P66Sz1xa3ZsLhepyjZHztYT9r6GeJBG0Wkz0Wo4vwHHPaqlUciAzkFf5 LO+NuqFZmAEpkhg4eSq80sxKc5M3tSjitqrZXZq830VkLW7mrMRk5GOFTlkjKmM3O+ja wWfMgX5ndOgB0TXTsvVE5NSilv7VuP7z8eCKJ3qFOHEfpPrd7TqZIGcuOELGqYyssY6p KGfqPkxbrt5jN9rZzLDboTN3ZuvCSygvAyABpvQP0rIO8BmoDhOTi8LWEBQwOkDXYvTW i9oA== X-Gm-Message-State: AOJu0Yy6fm/q/QngyeG684J89kz6OcQtGKyBX7lV4lkAHY6Y1V21ylxL CVMfQ7tJAUZfeKdz5bBqDdgjks82nxQWK1BDFSz5eA== X-Google-Smtp-Source: AGHT+IFCqsmzoqcqQkVGCsaaNdwgMoDwFcmoef6l3cIvaT9+Q1Mr0F+R0to1CHb/KFrWDZDWdPTvuQ== X-Received: by 2002:a17:902:d2ca:b0:1cc:501b:1d13 with SMTP id n10-20020a170902d2ca00b001cc501b1d13mr4856227plc.40.1700012999830; Tue, 14 Nov 2023 17:49:59 -0800 (PST) Return-Path: <■■■■■■■■■■■> Received: from test_■■■■■■■■■■■.localdomain ([■■■■■■■■■■■]) by smtp.gmail.com with ESMTPSA id d16-20020a170902ced000b001c726147a45sm6329773plg.190.2023.11.14.17.49.58 for <■■■■■■■■■■■> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 17:49:59 -0800 (PST) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by test_■■■■■■■■■■■.localdomain (Postfix) with ESMTP id F2FC5D5A for <■■■■■■■■■■■>; Wed, 15 Nov 2023 10:49:56 +0900 (JST) Received: (from apache@localhost) by localhost.localdomain (8.15.2/8.15.2/Submit) id 3AF1nuct004853; Wed, 15 Nov 2023 10:49:56 +0900 Date: Wed, 15 Nov 2023 10:49:56 +0900 Message-Id: <202311150149.3AF1nuct004853@localhost.localdomain> To: businessd■■■■■■■■■■■ Subject: 【AAA株式会社】■■■■■■■■■■■ From: "AAA株式会社" <npweb@na■■■■■■■■■■■> MIME-Version: 1.0 Content-Type: text/plain; Charset=UTF-8 Content-Transfer-Encoding: BASE64 44OG44K544OI5qeYDQoNCg0K44GT44Gu5bqm44Gv44CB5byK56S+44Gu5Y+O57SN44OX44Op44Oz 44K744Os44Kv44OI44OE44O844Or44CM44GK5a6i5qeY44K144Od44O844OI44CN44KS44GU5Yip 55So44GE44Gf44Gg44GN44G+44GX44Gm44CB6Kqg44Gr44GC44KK44GM44Go44GG44GU44GW44GE
guest

0

イメージ説明文字化け具合はこのような感じです。

投稿2023/11/14 08:58

karibe

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問