回答編集履歴

3

追記

2016/09/29 15:23

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -49,3 +49,33 @@
49
49
  あと、奇妙に思うのは、全体的にSJISで文字コードを統一しておられると思います。
50
50
 
51
51
  ですので、subjectや本文は文字コードのコンバートがいらないと思います。`mb_send_mail`が勝手に、SJISからISO-2022-JPに変換します。
52
+
53
+
54
+
55
+ さらに追記
56
+
57
+ --
58
+
59
+ Wikipedia ISO-2022-JP より
60
+
61
+ > また、符号化方式名をISO-2022-JPとしているのに、文字集合としてはJIS X 0212(補助漢字)やJIS X 0201の片仮名文字集合(いわゆる半角カナ)をも符号化している例があるが、**ISO-2022-JPではこれらの文字を許容していない。**これらの符号化は独自拡張の実装であり、中にはISO/IEC 2022の仕様に準拠すらしていないものもある。従って受信側の電子メールクライアントがこれらの独自拡張に対応していない場合、その文字あるいはその文字を含む行、時にはテキスト全体が文字化けすることがある。
62
+
63
+
64
+
65
+ となっていますので、mbstringが半角カナをうまくISO-2022-JPにコンバートできなくても、しょうがないような気がします。(mb_send_mailはISO-2022-JPにコンバートします。MS独自拡張ではありません)
66
+
67
+ どうしても、半角カナが送れないと嫌だ、という場合は、`ISO-2022-JP-MS`にすべてコンバートした上で、`mail`で送ればいいと思いますよ。
68
+
69
+
70
+
71
+ また、
72
+
73
+ ```PHP
74
+
75
+ $msg = mb_convert_kana($msg, "KV", "SHIFT-JIS");
76
+
77
+ ```とやって、半角カナから全角カナにコンバートしてやっても化けるとなると、おかしなことですね。
78
+
79
+ 提供されているコードではそのようにしているところがありませんでした。
80
+
81
+ (やろうとしているのは`$header`に対してです。コメントアウトされてますけど)

2

追記

2016/09/29 15:23

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -43,3 +43,9 @@
43
43
  $header = "From: " .mb_encode_mimeheader("テスト", 'ISO-2022-JP-MS') ."<test@xx.dxxx.xx.jp>";
44
44
 
45
45
  ```としてみてはどうでしょうか?
46
+
47
+
48
+
49
+ あと、奇妙に思うのは、全体的にSJISで文字コードを統一しておられると思います。
50
+
51
+ ですので、subjectや本文は文字コードのコンバートがいらないと思います。`mb_send_mail`が勝手に、SJISからISO-2022-JPに変換します。

1

追記

2016/09/29 10:37

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -19,3 +19,27 @@
19
19
  どういう流れで使っているのか分からないので、何とも言えないです。
20
20
 
21
21
  コードを切り出す際は、実際に症状が出ている状態で最小のコードを作っていただくと回答しやすいです。
22
+
23
+
24
+
25
+ 追記
26
+
27
+ --
28
+
29
+ やっぱり実際のコードとは違いましたね。
30
+
31
+ ```PHP
32
+
33
+ $header = "From: " .mb_encode_mimeheader("テスト") ."<test@xx.dxxx.xx.jp>";
34
+
35
+ ```ここで`mb_encode_mimeheader`に入れている「テスト」が実は半角なんですね?
36
+
37
+ `mb_encode_mimeheader`はinternal encodingのSJISでmimeエンコードされてしまいます。
38
+
39
+
40
+
41
+ ```PHP
42
+
43
+ $header = "From: " .mb_encode_mimeheader("テスト", 'ISO-2022-JP-MS') ."<test@xx.dxxx.xx.jp>";
44
+
45
+ ```としてみてはどうでしょうか?