2012-04-04 5 views
0

누구든지 내게 서버에서 파일을 첨부하고 전자 메일을 통해 첨부 파일로 보내는 방법을 알려줄 수 있습니까 ?? 나는 다음과 같은 코드가 있습니다서버에서 파일을 전자 메일로 첨부하십시오.

<?php 
// Read POST request params into global vars 
$to  = $_POST['to']; 
$from = $_POST['from']; 
$subject = $_POST['subject']; 
$message = $_POST['message']; 
// Obtain file upload vars 
$fileatt  = $_FILES['fileatt']['tmp_name']; 
$fileatt_type = $_FILES['fileatt']['type']; 
$fileatt_name = $_FILES['fileatt']['name']; 
$headers = "From: $from"; 
if (is_uploaded_file($fileatt)) { 
// Read the file to be attached ('rb' = read binary) 
$file = fopen($fileatt,'rb'); 
$data = fread($file,filesize($fileatt)); 
fclose($file); 
// Generate a boundary string 
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
// Add the headers for a file attachment 
$headers .= "\nMIME-Version: 1.0\n" . 
     "Content-Type: multipart/mixed;\n" . 
     " boundary=\"{$mime_boundary}\""; 
// Add a multipart boundary above the plain message 
$message = "This is a multi-part message in MIME format.\n\n" . 
"--{$mime_boundary}\n" . 
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
"Content-Transfer-Encoding: 7bit\n\n" . 
$message . "\n\n"; 
// Base64 encode the file data 
// Add file attachment to the message 
$message .= "--{$mime_boundary}\n" . 
"Content-Type: {$fileatt_type};\n" . 
" name=\"{$fileatt_name}\"\n" . 
//"Content-Disposition: attachment;\n" . 
//" filename=\"{$fileatt_name}\"\n" . 
"Content-Transfer-Encoding: base64\n\n" .    
      $data . "\n\n" . "--{$mime_boundary}--\n"; 
} 
// Send the message 
$ok = @mail($to, $subject, $message, $headers); 
if ($ok) { 
echo "<p>Mail sent! Yay PHP!</p>"; 
} else { 
echo "<p>Mail could not be sent. Sorry!</p>"; 
} 
?> 

을하지만,이 코드는 서버에서 파일을 첨부하지 않습니다. 도와주세요 .. 미리 감사드립니다 !! !!

+0

서버에있는 파일을 추가하는 코드는 어디에 있습니까? 파일을 업로드했는지 여부에 관계없이 _is_uploaded_file_로 확인하십시오. 따라서 서버에서 파일을 추가 할 수 없습니다. –

+0

안녕 lspcity .. !! Thnk u 님, 도와 주셔서 감사합니다 .. !! 글쎄, 문제가 해결되었습니다 .. 이전에 서버에 파일을 업로드하는 중이었습니다 .. 파일을 데이터베이스에 삽입하고 첨부 파일로 메일을 보낼 때 문제가 해결되었습니다. 코드는 다음과 같습니다. $ sql12 = "draft *에서 select * where path = '$ path'"; \t \t \t \t \t \t \t $ result = mysql_query ($ sql12); \t \t \t \t \t $ curr_file = mysql_fetch_assoc ($ result); $ fileatt_size = $ curr_file [ 'File_Size']; $ fileatt_type = $ curr_file [ 'File_Type']; $ fileatt_name = $ curr_file [ 'File_Name']; $ data = $ curr_file [ 'File_Content']; Thnk u so mch again ... !! –

답변

0

하나의 질문 : 첨부 파일이있는 전자 메일을 보내시겠습니까? 아니면이 문제로 PHP 기술을 향상 시키시겠습니까?

메일을 보내려는 경우 PHPMailer을보고 매우 쉽게 처리 할 수 ​​있습니다. 나 자신을 위해 나는 이것을 문제없이 수년간 사용하고있다.

실력 향상을 위해 첨부 파일이 base64로 인코딩되어 있지만 다음과 같은 행을 찾을 수 없습니다. $ data = base64_encode ($ data);$ 데이터을 첨부 파일에 메일에 추가하십시오.

+0

예 .. 죄송합니다. 여기에 코드를 붙여 넣는 동안 그 행을 놓쳤습니다. 코드는 다음과 같습니다. $ headers. = "MIME 버전 : 1.0 \ n". "Content-Type : multipart/mixed; \ n" "boundary = \"{$ mime_boundary} \ ""; $ data = chunk_split (base64_encode ($ data)); 모든 것이 첨부 파일이있는 이메일을 보낼 수 있습니다. 서버에서 파일을 첨부하려고 할 때 문제가 발생합니다. –

관련 문제