2011-07-05 7 views
0

사람!PHP 메일 : 첨부 파일 오류

첨부 파일이있는 메시지를 보내야합니다. 그래서 나는 인터넷에서 몇 가지 예에 따라 약간의 코드를 가지고 :

$path = $_SERVER['DOCUMENT_ROOT'] . ATTACHMENT_DIR . DS; 
$files = array('filename1.ext', 'filename2.ext'); 
$EOL = "\r\n"; // "\n"; 

$to = "[email protected]"; 
$from = '=?UTF-8?B?' . base64_encode($_POST['name']) . '?=' . " <" . $_POST['email'] . ">"; 
$subject = "subject"; 
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; 
$message = $_POST['message']; 

$mime_boundary = md5(uniqid(time())); 

$headers .= "From: $from" . 
    "{$EOL}MIME-Version: 1.0{$EOL}" . 
     "Content-Type: multipart/mixed; boundary=\"{$mime_boundary}\"{$EOL}{$EOL}" . 
     "This is a multi-part message in MIME format.{$EOL}" . 
     "-–{$mime_boundary}{$EOL}" . 
     "Content-Type: text/plain; charset=UTF-8{$EOL}" . 
     "Content-Transfer-Encoding: 8bit{$EOL}{$EOL}" . 
     $message . "{$EOL}{$EOL}"; 

    // preparing attachments 
    for ($x = 0; $x < count($files); $x++) { 
     $file = fopen($path . $files[$x], "rb"); 
     $data = fread($file, filesize($path . $files[$x])); 
     fclose($file); 
     $data = chunk_split(base64_encode($data), 72, $EOL); 
     $headers .= "-–{$mime_boundary}{$EOL}" . 
      "Content-Type: application/octet-stream; name=\"$files[$x]\"{$EOL}" . 
      "Content-Transfer-Encoding: base64{$EOL}{$EOL}" . 
      "Content-Disposition: attachment; filename=\"$files[$x]\"{$EOL}" . 
      $data . "{$EOL}"; 
} 
$headers .= "--{$mime_boundary}--{$EOL}"; 

$result = @mail($to, $subject, "", $headers); 

의미가 있습니다,하지만 뭔가 잘못된 것입니다. 이 코드는 다음을 생성합니다.

To: [email protected] 
Subject: =?UTF-8?B?c3ViamVjdA==?= 
From: =?UTF-8?B?Sm9obiBEb2U=?= <[email protected]> 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary="2dd88e9ef3ae338d9e93bc8448a74093" 

This is a multi-part message in MIME format. 
-–2dd88e9ef3ae338d9e93bc8448a74093 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: 8bit 

test message 

-–2dd88e9ef3ae338d9e93bc8448a74093 
Content-Type: application/octet-stream; name="filename1.ext" 
Content-Transfer-Encoding: base64 

Content-Disposition: attachment; filename="filename1.ext" 
R0lGODlhMgAyAPf/ALsoJpcZFeG8wZsoJb+NiKZDQMV6eKgYFqpJR6lWVdKtq6oeHP7//9a0 
[cutted] 
Qx66WAxbFOMNs8gDJAohCr5Svd8mUEgM7oAI7HghBRMJra6XEhAAOw== 

-–2dd88e9ef3ae338d9e93bc8448a74093 
Content-Type: application/octet-stream; name="filename2.ext" 
Content-Transfer-Encoding: base64 

Content-Disposition: attachment; filename="filename2.ext" 
R0lGODlhMgAyAPf/ALsoJpcZFeG8wZsoJb+NiKZDQMV6eKgYFqpJR6lWVdKtq6oeHP7//9a0 
[cutted] 
Qx66WAxbFOMNs8gDJAohCr5Svd8mUEgM7oAI7HghBRMJra6XEhAAOw== 

--2dd88e9ef3ae338d9e93bc8448a74093-- 

메시지는 텍스트 또는 첨부 파일없이 수신됩니다. 제발, 내가 맞는 해결책을 찾도록 도와주세요!

+0

나는 접근 방식을 바꾸고 phpmailer http://phpmailer.worxware.com/와 같은 PHP 메일 라이브러리 중 하나를 얻습니다. 그러면 한 줄에 파일을 첨부 할 수 있습니다. –

+0

나는 이미 그것에 대해 생각 해왔다. 나는 더 쉬운 해결책을 찾고 싶다. –

+0

당신은 이미 가지고있는 것보다 어떤 것을 미리 만들었습니까? –

답변

0

Mail_Mime을 사용하지 않는 특별한 이유가 있습니까?

+0

oldschool hardcore? :) PEAR 첨부되지 않았습니다 –

+0

그래, 내가 생각 ... (둘 다) :) –

관련 문제