Отправка вложения файла через форму html отправляет большой кусок текста в тело электронной почты

Я пытаюсь сделать загрузку файла html для отправки по электронной почте с помощью php. Вот фрагмент кода:

$attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name']))); $filename = $_FILES['file']['name']; $boundary =md5(date('r', time())); $headers = "From: [removed_email]\r\nReply-To: [removed_email]"; $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\""; $body="This is a multi-part message in MIME format. --_1_$boundary Content-Type: multipart/alternative; boundary=\"_2_$boundary\" --_2_$boundary Content-Type: text/plain; charset=\"iso-8859-1\" Content-Transfer-Encoding: 7bit test --_2_$boundary-- --_1_$boundary Content-Type: application/octet-stream; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --_1_$boundary--"; mail('[removed_email]', 'Leidige stillinger', $body, $headers) or die("NO");

Я получаю электронную почту, но с мусором текста, похоже, что граница $ генерирует большой ненужный текст. Или я делаю все это неправильно, сначала я должен загрузить файл где-то на сервере, а затем отправить его по электронной почте

1 ответ

Я всегда предпочитал вручную перекодировать кодировку MIME, как и вы, вместо использования библиотеки. Вы близки. Попробуй это:

// to, from, subject, message body, attachment filename, etc. $to = "[removed_email]"; $from = "[removed_email]"; $subject = "subject"; $message = "this is the message body"; $filename="/home/user/file.pdf"; //location of file - path and filename $fname="file.jpeg"; //name of file for display purposes $headers = "From: $from"; // boundary $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; // headers for attachment $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; // multipart boundary $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; $message .= "--{$mime_boundary}\n"; // preparing attachments $file = fopen($filename,"rb"); $data = fread($file,filesize($fname)); fclose($file); $data = chunk_split(base64_encode($data)); $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$fname\"\n" . "Content-Disposition: attachment;\n" . " filename=\"$fname\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; $message .= "--{$mime_boundary}\n"; $ok = @mail($to, $subject, $message, $headers, "-f " . $from);

licensed under cc by-sa 3.0 with attribution.