回答編集履歴

2

コードのタイポ訂正

2023/11/15 05:32

投稿

ikedas
ikedas

スコア4443

test CHANGED
@@ -19,7 +19,7 @@
19
19
  $display_name = "AAA株式会社";
20
20
  $address = "webmail@example.co.jp";
21
21
 
22
- if (preg_match('/[^\x21-\x7E]/', $display_name)) {
22
+ if (preg_match('/[^\x20-\x7E]/', $display_name)) {
23
23
  $encoded = mb_encode_mimeheader($display_name, "UTF-8", "B");
24
24
  } elseif (preg_match('/["\\]/', $display_name)) {
25
25
  $encoded = '"' . preg_replace('/(["\\])/', '\\\1', $display_name) . '"';

1

微追記

2023/11/15 00:25

投稿

ikedas
ikedas

スコア4443

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  ### ヘッダフィールド
16
16
 
17
- 例えば、上掲のコードだとFromヘッダフィールドの値が `エンコードされた文字列@ドメイン名` のようになってしまっているはずです。フィールド値がまとめてエンコードされて一語になってしまい、MTAがドメイン名を補完したのだと考えられます (全体としてメールアドレスの形式にはなるので送信者ドメイン認証などは通ると思われる)。From、To、Ccなどのフィールドは構造化ヘッダフィールドなので値全体をまとめてエンコードしてはいけません。エンコードが必要な要素はエンコードし、他の要素と組み合わせてフィールド値とします。まじめにやるとこんな感じです。
17
+ 例えば、上掲のコードだとFromヘッダフィールドの値が `エンコードされた文字列@ドメイン名` のようになってしまっているはずです。フィールド値がまとめてエンコードされて一語になってしまい、MTAがドメイン名を補完したのだと考えられます (全体としてメールアドレスの形式にはなるので送信者ドメイン認証などは通ると思われる)。From、To、Ccなどのフィールドは構造化ヘッダフィールドなので値全体をまとめてエンコードしてはいけません。エンコードが必要な要素はエンコードし、他の要素と組み合わせてフィールド値とします。まじめにやるとこんな感じです (これでも問題が起きることはあるので後で若干手直しするかもしれません)
18
18
  ```
19
19
  $display_name = "AAA株式会社";
20
20
  $address = "webmail@example.co.jp";