質問編集履歴

1

xxxxx

2020/11/29 13:52

投稿

tomato879241
tomato879241

スコア133

test CHANGED
File without changes
test CHANGED
@@ -1,155 +1 @@
1
- PHPで複数のファイルを添付できるSendmailのコードを書いています。添付ファイルを送ることができますが、ファイル名が日本語だとそれが文字化けしていまします。以下のものがこれまでのコードです。
2
-
3
-
4
-
5
- ```PHP
6
-
7
- <?php
8
-
9
-
10
-
11
- error_reporting(E_ALL);
12
-
13
- ini_set('display_errors', 1);
14
-
15
- mb_internal_encoding ("UTF-8");
16
-
17
-
18
-
19
- if(isset($_FILES) && (bool) $_FILES) {
20
-
21
- $files = array();
22
-
23
- foreach($_FILES as $name=>$file) {
24
-
25
- $file_name = $file['name'];
26
-
27
- $temp_name = $file['tmp_name'];
28
-
29
- $file_type = $file['type'];
30
-
31
- $path_parts = pathinfo($file_name);
32
-
33
- $ext = $path_parts['extension'];
34
-
35
- array_push($files, $file);
36
-
37
- }
38
-
39
-
40
-
41
- // email fields: to, from, subject, and so on
1
+ xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx
42
-
43
- $to = $_POST['mail_recipient'];
44
-
45
- $cc = $_POST['mail_copy'];
46
-
47
- $bcc = $_POST['mail_bcc'];
48
-
49
- $from = $_POST['mail_sender'];
50
-
51
- $myReturn = $_POST['mail_return'];
52
-
53
- $subject = $_POST['mail_subject'];
54
-
55
- $message = $_POST['mail_message'];
56
-
57
- $returnpath = "-f" . $myReturn;
58
-
59
- $headers = "From: $from\r\n";
60
-
61
- $headers .= "Cc: $cc\r\n";
62
-
63
- $headers .= "Bcc: $bcc";
64
-
65
-
66
-
67
- // boundary
68
-
69
- $semi_rand = md5(time());
70
-
71
- $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
72
-
73
-
74
-
75
- // headers for attachment
76
-
77
- $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
78
-
79
-
80
-
81
- // multipart boundary
82
-
83
- $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain;\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
84
-
85
- $message .= "--{$mime_boundary}\n";
86
-
87
-
88
-
89
- // preparing attachments
90
-
91
- for($x=0; $x<count($files); $x++){
92
-
93
- $file = fopen($files[$x]['tmp_name'], "rb");
94
-
95
- $data = fread($file, filesize($files[$x]['tmp_name']));
96
-
97
- fclose($file);
98
-
99
- $data = chunk_split(base64_encode($data));
100
-
101
- $name = $files[$x]['name'];
102
-
103
- $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" .
104
-
105
- "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" .
106
-
107
- "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
108
-
109
- $message .= "--{$mime_boundary}\n";
110
-
111
- }
112
-
113
-
114
-
115
- // send
116
-
117
- $ok = mail($to, $subject, $message, $headers, $returnpath);
118
-
119
- if ($ok) {
120
-
121
- echo "<p>mail sent to $to!</p>";
122
-
123
- } else {
124
-
125
- echo "<p>mail could not be sent!</p>";
126
-
127
- }
128
-
129
- }
130
-
131
-
132
-
133
- ?>
134
-
135
- ```
136
-
137
- 例えば、「リスト.txt」というファイルを添付すると、ファイル名が以下の画像にあるように化けてしまいます。
138
-
139
-
140
-
141
- ![イメ![イメージ説明](f99a84f2b234f504dd1e7f0336a19927.jpeg)873bf395314b386d055785a985fb4ffb.jpeg)
142
-
143
-
144
-
145
- [このStack Overflowのトピック](https://stackoverflow.com/questions/40801570/japanese-email-attachment-names-garbled-php-mail)によると、
146
-
147
-
148
-
149
- ```PHP
150
-
151
- $finame = $filenameattach[$ctrFileName]; mb_internal_encoding ("UTF-8"); $finame = mb_convert_encoding($finame, "utf-8"); $finame = mb_encode_mimeheader($finame);
152
-
153
- ```
154
-
155
- のように変更する、とありますが、どうもよくわかりません。自分のコードではどう変更したらファイル名が日本語でもUTF-8で文字変換されるでしょうか?よろしくお願いします。