我有一个应该将文件附加到外发电子邮件的功能。由于某种原因,它只发送空白文件。
有人可以帮忙吗?我已验证文件本身已正确上传,并且位于此功能正常工作所需的确切位置。仅允许使用 .pdf、.doc 和 .docx
此外,这是在 Windows 服务器上......(我知道,我知道......太糟糕了!)
这是功能:
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
$file = str_replace('/','\\',$path.$filename);
$file_size = filesize($file);
$handle = fopen($file, "rb");
$contenta = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($contenta));
$uid = md5(uniqid(time()));
$name = basename($file);
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "Reply-To: ".$replyto."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."--";
if (mail($mailto, $subject, "", $header)) {
return true; // or use booleans here
} else {
return false;
}
}
这是使用它的代码:
//resume
$errors="";
$dbDir="/candidate-resources/files/temp/";
$baseDir=$_SERVER['DOCUMENT_ROOT'].$dbDir;
$validTypes=array(".doc",".pdf",".docx");
$filesToAdd=array();
$atLeastOne=false;
$valid=false;
$qs="";
if(count($_FILES)>0){
foreach($_FILES as $k=>$v){
if($v['size']>0){
$ext=substr($v['name'],strrpos($v['name'],"."));
if(!in_array($ext,$validTypes)){
$errors='Only ".doc", ".docx", and ".pdf" files can be uploaded. "'.$ext.'" is not a valid file type.';
}
}
}
}
$requireds=array("name","email","message");
foreach($_POST as $k=>$v){//check for injection and spammers
if(preg_match("/(%0A|%0D|\\n+|\\r+)(content-type:|to:|cc:|bcc:)/i",$v) || strpos($v,"http://")!==false || strpos($v,"www.")!==false){
$errors="HTML, website addresses, and scripting code are not allowed in any field. Please check your entries and try again.";
}
$post[$k]=strip_tags(trim(htmlentities($v)));
}
unset($_POST);
foreach($requireds as $r){
if(!strlen(trim($post[$r]))){
$errors.="<li>".ucwords($r)."</li>";
}
}
if(strlen(trim($errors))){
$errors="These fields were left blank. Please fix and resubmit.<ul>".$errors."</ul>";
}
else{
if(ereg("([[:alnum:]\.\-]+)(\@[[:alnum:]\.\-]+\.+)",$post['email'])!=true){
$errors="<p>You must enter a valid email address.</p>";
}
else{
$filename = '';
$ext = '';
// upload the file, then attach it to the email, then delete it
foreach($_FILES as $k=>$v){
if($v['size']!=0){
$atLeastOne=true;
$ext=substr($v['name'],strrpos($v['name'],"."));
move_uploaded_file($v['tmp_name'], $baseDir . "/" . $v['name']);
$filename = $v['name'];
}
}
$to = 'avalid@emailaddress';
$subject="Contact Form";
$headers="From: ".$post["name"]." <".$post["email"].">\r\nReply-To: ".$post["email"]."\r\n";
$message=$subject."\r\n=================================================\r\n\r\n";
foreach($post as $k=>$v) {
if(strlen(trim($v))){
$message.=ucwords(str_replace("_"," ",$k)).": {$v}\r\n";
}
}
if(strlen($filename) > 0) {
mail_attachment($filename, $baseDir, $to, $post["email"], $post["name"], $post["email"], $subject, $message);
//now delete the temp file
if (file_exists(str_replace('/','\\',$baseDir.$filename))) {
unlink(str_replace('/','\\',$baseDir.$filename)); // delete it here only if it exists
}
}else{
mail($to,$subject,$message,$headers);
}
$errors="true";
}
}
请原谅...我刚刚继承了此代码(即:#1 7 岁,#2 现在他们希望能够将文件附加到此电子邮件)