I have a custom PHP form that was coded about 3 yeas ago. It was built to email all atttachments including docx files and worked like a charm. Just starting this year, client is noticing that users are complaining of errors sending form which allows them to upload their resume. Troubleshooting found that it only happens with SOME .docx files. We have a ton of .docx files that were uploaded and emailed fine. So it is either: 1. a change in the .docx encoding or something im not familiar with 2. Users must be corrupting their .docx files somehow.
I searched for any evidence of the way to code .docx files changed and found nothing. My code appears to be the best practice for uploading multiple files, even .docx files. To make sure I am posting my send-mail.php file and asking if anyone sees something that would allow all listed file formats, and some .docx to send FINE, but some .docx files are choking the script and failing at the "If (OK) {" line, meaning error sending mail. Thanks ahead of time for any help.
UPDATE: Seems like it is not working on docs saved in "Word 2016" format. So what would I have to do to my code below to make it work,also, with Word 2016 files?
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 = "xxxx@gmail.com";
$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