-1

こんにちは私は複数の添付ファイル付きの電子メールを送信するコードを持っていますが、以下のそのコードの1つに問題があります。

画像を送信するたびに、「サポートされていないファイル形式!」が表示されます。コードのその部分を削除すると、うまく機能しますが、ユーザーはあらゆる種類のファイルを送信できます(これは危険です、私は知っています)。ファイルサイズチェックはうまく機能します。なにが問題ですか?: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>');
        }
}
4

1 に答える 1

2
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";  

する必要があります

$strHeader .= "Content-type: application/octet-stream\n";

ファイル名部分なし。それはコンテンツ処理ラインに行きます。

全体像では、独自のmimeメールを作成しないでください。あなたが見つけているように、それは苦痛で醜いです。PHPMailerまたはSwiftmailerを使用して、それを実行します。アタッチメントビジネス全体を、いずれかのライブラリを使用したSINGLE関数呼び出しに減らすことができます。

于 2012-06-07T18:44:44.030 に答える