您好我的代码可以发送带有多个附件的电子邮件,但我在下面的代码中遇到了一些问题。
每当我提交图片时,我都会收到“Unsuported file format!”。如果我删除了那部分代码,它工作得很好,但用户可以发送每种类型的文件(这是危险的,我知道)。 Filesize检查工作得很好。怎么了? :S
//*** Attachment ***//
for($i=0;$i<count($_FILES["fileAttach"]["name"]);$i++)
{
$filesize = $_FILES["fileAttach"]["size"][$i]/1024;
if($_FILES["fileAttach"]["name"][$i] != "" && $filesize < 50 && preg_match("image/", $_FILES["fileAttach"]["type"][$i]))
{
$strFilesName = $_FILES["fileAttach"]["name"][$i];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"][$i])));
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";
$strHeader .= "Content-Transfer-Encoding: base64\n";
$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
$strHeader .= $strContent."\n\n";
}
elseif(!preg_match("image/", $_FILES["fileAttach"]["type"][$i])){
die('<div id="warning">Unsuported file format!</div>');
}
elseif($filesize > 50){
die('<div id="warning">Filesize must be less than 2 Mb!!!</div>');
}
}
答案 0 :(得分:2)
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";
应该只是
$strHeader .= "Content-type: application/octet-stream\n";
没有文件名部分。这将进入内容处置行。
在更大的图片视图中,不要构建自己的哑剧电子邮件。当你发现它时,它是痛苦和丑陋的。使用PHPMailer或Swiftmailer为您执行此操作 - 可以将整个附件业务简化为使用任一库的 SINGLE 函数调用。