2

フォームから添付ファイルを送信しようとしています。電子メールは、私がアップロードしようとしているものではなく、添付ファイルを生成します。$strNewFileNameユーザーに送信するときに、アップロードして名前をに変更したいと思います。

html コード:

<input type="file" class="upload" name="uploaded_file[]" id="uploaded_file"></input>

php ファイル:

<?php
$strTo = "me@example.com";
$strSubject = "Document Updated";  
$strMessage = nl2br($_GET["sqlCode"]);
$strNewFileName = $_GET["RevisedFileName"];

 if (is_uploaded_file($_FILES['uploaded_file']['tmp_name'])) {
echo "File ". $_FILES['uploaded_file']['name'] ." uploaded successfully.\n";
echo "Displaying contents\n";
readfile($_FILES['uploaded_file']['tmp_name']);
} else {
echo "Possible file upload attack: ";
echo "filename '". $_FILES['uploaded_file']['tmp_name'] . "'.";
}
 //*** Uniqid Session ***//  
$strSid = md5(uniqid(time()));   
$strHeader = "";  
$strHeader .= "From: Document Update\r\nReply-To: example@example.com";    
$strHeader .= "MIME-Version: 1.0\n";  
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";  
$strHeader .= "This is a multi-part message in MIME format.\n";   
$strHeader .= "--".$strSid."\n";  
$strHeader .= "Content-type: text/html; charset=utf-8\n";
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";  
$strHeader .= $strMessage."\n\n"; 
rename("$strFilesName", "$strNewFileName");  

  // *** Attachment *** //  
  $strFilesName = $_FILES["uploaded_file"]["name"]; 
  $strContent = chunk_split(base64_encode(file_get_contents($_FILES["uploaded_file"]["name"])));
  $strHeader .= "--".$strSid."\n";  
  $strHeader .= "Content-Type: application/pdf; name=\"".$strNewFileName."\"\r\n";
  $strHeader .= "Content-Transfer-Encoding: base64\n";  
  $strHeader .= "Content-Disposition: attachment;\n\n";  
  $strHeader .= $strContent."\n\n";

$flgSend = @mail($strTo,$strSubject,$strMessage,$strHeader);  

if($flgSend)  
{  
   echo "Approval Send Complete."; 
}  
else  
{  
   echo "Cannot send mail, Approval has not been processed.";  
 } 

 ?>
4

2 に答える 2

0

あなたの問題はここにあると思います:

$strContent = chunk_split(base64_encode(file_get_contents($_FILES["uploaded_file"]["name"])));

_FILES["uploaded_file"]["name"]サーバー上の場所ではなく、アップロードされたファイルの元の名前を表します。これには を使用する必要があります$_FILES['uploaded_file']['tmp_name'](以前のスクリプトで、適切にアップロードされたファイルであることを検証するために行ったように.

また、配列アクセスの場合 (uploaded_file[]入力名として を使用するため)、有効な添付ファイルの配列を作成するには、次のようにする必要があります。

$valid_attachments = array();
foreach ($_FILES['uploaded_file']['tmp_name'] as $key => $temp_file_name) {
    if (is_uploaded_file($temp_file_name)) {
        $valid_attachments[] = array(
            'path' => $temp_file_name,
            'filename' => $_FILES['uploaded_file']['name'][$key],
            'type' => $_FILES['uploaded_file']['type'][$key],
            'size' => $_FILES['uploaded_file']['size'][$key]
        );
    }
}

次に、コードの「Attachment」セクションでこの配列をループし、添付ファイルを電子メールに追加する必要があります。

于 2013-02-21T17:49:40.073 に答える
0

複数のファイルを送信するようにファイルのアップロードを設定しているようですがname="uploaded_file[]"、php コードで 1 つのファイルしか処理していません。この場合[]、html の を削除するだけです。

于 2013-02-21T17:48:35.187 に答える