質問編集履歴
1
xxxxx
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
|
-
|
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で文字変換されるでしょうか?よろしくお願いします。
|