Ich habe ein benutzerdefiniertes PHP-Formular, das vor etwa 3 Jahren codiert wurde. Es wurde erstellt, um alle Attachments einschließlich docx-Dateien per E-Mail zu versenden und funktionierte wie ein Zauber. Gerade in diesem Jahr bemerkt der Kunde, dass Benutzer sich über Fehler beim Senden von Formularen beschweren, die es ihnen ermöglichen, ihren Lebenslauf hochzuladen. Die Fehlerbehebung hat ergeben, dass dies nur bei einigen .docx-Dateien geschieht. Wir haben eine Tonne DOCX-Dateien, die hochgeladen und per E-Mail geschickt wurden. Also ist es entweder: 1. eine Änderung in der .docx-Codierung oder etwas, das ich nicht kenne 2. Benutzer müssen ihre .docx-Dateien irgendwie korrumpieren.Problem, ganz plötzlich Senden von .docx als Mail-Anhang
Ich suchte nach einem Beweis für die Art zu codieren .docx-Dateien geändert und nichts gefunden. Mein Code scheint der beste Weg zu sein, um mehrere Dateien, auch .docx-Dateien, hochzuladen. Um sicherzustellen, dass ich meine send-mail.php-Datei poste und fragte, ob jemand etwas sieht, das alle aufgelisteten Dateiformate und einige .docx-Dateien FINE senden würde, aber einige .docx-Dateien ersticken das Skript und scheitern beim "If (OK) {"line", bedeutet Fehler beim Senden der Mail. Vielen Dank für die Hilfe.
UPDATE: Scheint, es funktioniert nicht für Dokumente im Word 2016-Format gespeichert. Was müsste ich also mit meinem Code tun, damit er auch mit Word 2016-Dateien funktioniert?
if(isset($_FILES)) {
// define allowed extensions
$allowedExtensions = array("pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt","");
$files = array();
// loop through all the files
foreach($_FILES as $name=>$file) {
// define some variables
$file_name = $file['name'];
$temp_name = $file['tmp_name'];
$file_type = $file['type'];
// check if this file type is allowed
$path_parts = pathinfo($file_name);
$ext = $path_parts['extension'];
if(!in_array($ext,$allowedExtensions)) {
die("Your file type is not allowed. Must be only pdf, txt, doc, docx, gif , jpeg, jpg, png, or rtf. Use backspace to go back.");
}
// move this file to the server YOU HAVE TO DO THIS
$server_file = "/home/content/25/9264325/html/wp-content/uploads/files/$path_parts[basename]";
move_uploaded_file($temp_name,$server_file);
// add this file to the array of files
array_push($files,$server_file);
}
// define some mail variables
$to = "[email protected]";
$from = $email;
$subject ="NEW EMPLOYMENT APPLICATION";
$headers = "From: Cxxxxxxs \r\nReply-To: ".$from;
// define our boundary
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// tell the header about the boundary
$headers .= "\r\nMIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"{$mime_boundary}\"\r\n\r\n";
// part 1: define the plain HTML email
$message ="\r\n\r\n--{$mime_boundary}\r\n";
$message .="Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
$message .="Content-Transfer-Encoding: base64\r\n\r\n" . $msg . "\r\n\r\n";
// part 2: loop and define mail attachments if thee is a file
foreach($files as $file) {
$aFile = fopen($file,"rb");
$data = fread($aFile,filesize($file));
fclose($aFile);
$data = chunk_split(base64_encode($data));
$message .= "\r\n--{$mime_boundary}\r\n";
$message .= "Content-Type: {$file_type};\r\n";
$message .= " name=\"{$file_name}\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= "filename=\"{$file_name}\"\r\n";
$message .= $data . "\r\n";
$message .= "--{$mime_boundary}--\r\n";
}
// send the email
$ok = mail($to, $subject, $message, $headers);
if ($ok) {
header('Location: http://www.xxxxx.com/thank-you/');
} else {
echo "<p>mail could not be sent!</p>";
}
die();
}// if isset files
Verwenden Sie ['PHPMailer'] (https://github.com/PHPMailer/PHPMailer) oder eine entsprechende Bibliothek, um dieses Heavy Lifting durchzuführen. Wenn Sie darauf bestehen, Ihre eigenen zu rollen, was ist der Wert von '$ file_type' für eine beschädigte Datei? – bishop