2011-12-08 4 views
5

이 코드를 사용하여 첨부 파일이있는 전자 메일을 보내지 만 전자 메일을 수신하고 첨부 파일이 내용에 나타나기 때문에 첨부 파일에 오류가 있습니다. 동일한 코드를 사용하기 전에 성공적으로 작동했습니다. 왜???php를 사용하여 첨부 파일이있는 전자 메일 보내기

<?php 
// sending email with attachments 

    function sendEmail($to,$from,$file,$ext){ 

     $to = "[email protected]"; 
    $from = "[email protected]"; 
     $subject = "Translation Request"; 

    $random_hash = md5(date('r', time())); 

    $headers = "From: [email protected]\r\nReply-To: [email protected]"; 

    $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 

    $attachment = chunk_split(base64_encode(file_get_contents("Test.doc"))); 

    $output = " 
     --PHP-mixed-$random_hash; 
     Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash' 
     --PHP-alt-$random_hash 
     Content-Type: text/plain; charset='iso-8859-1' 
     Content-Transfer-Encoding: 7bit 

     Hello World! 
     This is the simple text version of the email message. 

     --PHP-alt-$random_hash 
     Content-Type: text/html; charset='iso-8859-1' 
     Content-Transfer-Encoding: 7bit 

     <h2>Hello World!</h2> 
     <p>This is the <b>HTML</b> version of the email message.</p> 

     --PHP-alt-$random_hash-- 

     --PHP-mixed-$random_hash 
     Content-Type: application/doc; name=Test.doc 
     Content-Transfer-Encoding: base64 
     Content-Disposition: attachment 

     $attachment 
     --PHP-mixed-$random_hash--"; 
     $send = @mail($to, $subject, $output, $headers); 
    return $send; 
    } 
?> 

+0

가능한 중복 [PHP를 사용하여 첨부 파일이있는 이메일을 보내는 방법?] (http://stackoverflow.com/questions/2027069/how-to-send-email-with-attachment-using-php) – mario

+0

귀하의 코드는 고칠 가치가 없습니다. 그것은 MIME 마크 업을 깨는 들여 쓰기보다 큽니다. – mario

답변

2

this 자습서에서 설명한 방법을 사용하거나 PEAR 모듈 중 하나를 사용하여 this 자습서에서 설명한 방법으로 첨부 파일이 포함 된 전자 메일을 보낼 수 있습니다.

PEAR을 사용하는 것이 더 쉬운 방법 일 수 있습니다. 유일한주의 사항은 모든 호스트에서 PEAR을 사용할 수 없다는 것입니다.

6

어떤 이유로 no use phpmailer? 첨부 파일에 대한 예 :

function mandaMail ($nombredest, $maildest, $asunto, $cuerpo) { 
require_once("mailer/class.phpmailer.php"); 
$mail = new PHPMailer(true); 
$mail->IsSMTP(); 

try { 
    $mail->Host = "xxxx"; $mail->Port = 25; // smtp server 
    $mail->SMTPAuth = true; 
    $mail->Username = "xxxx"; // smtp username 
    $mail->Password = "xxxx"; // smtp pass 
    $mail->AddReplyTo("xxxx", "xxxx"); // email & name 
    $mail->SetFrom("xxxx", "xxxx"); // similar to up value 

    $mail->AddAddress($maildest, $nombredest); 
    $mail->Subject = $asunto; 
    $mail->MsgHTML(file_get_contents($cuerpo)); 

    $mail->AddAttachment("xxxx", "xxxx"); // attachments directory, attachment name (ie: dir/blah.jpg, blah.jpg) 
    $mail->Send(); 

} catch (phpmailerException $e) { echo $e->errorMessage(); 
} catch (Exception $e) { echo $e->getMessage(); } 
+0

^끝에서 여분의 곱슬 –

+0

은 여분의 곱슬을 제거했습니다. –

0

것은 내가 이것을 사용하고 있습니다 :

function attachfile($file, $type = "application/octetstream") { 
    if(!($fd = fopen($file, "r"))) { 
     $this->errstr = "Error opening $file for reading."; 
     return 0; 
    } 
    $_buf = fread($fd, filesize($file)); 
    fclose($fd); 

    $fname = $file; 
    for($x = strlen($file); $x > 0; $x--) 
     if($file[$x] == "/") 
     $fname = substr($file, $x, strlen($file) - $x); 

    // Convert to base64 becuase mail attachments are not binary safe. 
    $_buf = chunk_split(base64_encode($_buf)); 

    $this->attachments[$file] = "\n--" . $this->boundary . "\n"; 
    $this->attachments[$file] .= "Content-Type: $type; name=\"$fname\"\n"; 
    $this->attachments[$file] .= "Content-Transfer-Encoding: base64\n"; 
    $this->attachments[$file] .= "Content-Disposition: attachment; " . 
            "filename=\"$fname\"\n\n"; 
    $this->attachments[$file] .= $_buf; 

    return 1; 
    } 
0

에 코드를 실 거예요 작업이 될 이메일 나던 지원 공백 때문이다.

$output = " 
     --PHP-mixed-$random_hash; 
     Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash' 
     --PHP-alt-$random_hash 
     Content-Type: text/plain; charset='iso-8859-1' 
     Content-Transfer-Encoding: 7bit 

당신은

내가이과를 사용하고
$output = " 
--PHP-mixed-$random_hash; 
Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash' 
--PHP-alt-$random_hash 
Content-Type: text/plain; charset='iso-8859-1' 
Content-Transfer-Encoding: 7bit 
0

(밖으로 PHPMailer 사용) 공백없이 사용해야합니다 희망이 당신에게 도움이 될 것입니다 .

<form enctype="multipart/form-data" method="POST" action=""> 
    <label>Your Name <input type="text" name="sender_name" /> </label> <br> 
    <label>Your Email <input type="email" name="sender_email" /> </label> <br> 
    <label>Subject <input type="text" name="subject" /> </label> <br> 
    <label>Message <textarea name="message"></textarea> </label> <br> 
    <label>Attachment <input type="file" name="my_file" /></label><br> 
    <label><input type="submit" name="button" value="Submit" /></label> 
</form> 

<?php 
echo "<pre>";print_r($_REQUEST);echo "</pre>"; //comment this line 
echo "<pre>";print_r($_FILES);echo "</pre>"; //comment this line 
if($_POST && isset($_FILES['my_file'])) 
{ 

    $from_email   = '[email protected]_domain.com'; //from mail, it is mandatory with some hosts 
    $recipient_email = '[email protected]'; //recipient email (most cases it is your personal email) 

    //Capture POST data from HTML form and Sanitize them, 
    $sender_name = filter_var($_POST["sender_name"], FILTER_SANITIZE_STRING); //sender name 
    $reply_to_email = filter_var($_POST["sender_email"], FILTER_SANITIZE_STRING); //sender email used in "reply-to" header 
    $subject  = filter_var($_POST["subject"], FILTER_SANITIZE_STRING); //get subject from HTML form 
    //$message  = filter_var($_POST["message"], FILTER_SANITIZE_STRING); //message 
    $message  = "Name : ".$sender_name."\nMessage : ".$_POST["message"]; //message 

    //Get uploaded file data 
    $file_tmp_name = $_FILES['my_file']['tmp_name']; 
    $file_name  = $_FILES['my_file']['name']; 
    $file_size  = $_FILES['my_file']['size']; 
    $file_type  = $_FILES['my_file']['type']; 
    $file_error  = $_FILES['my_file']['error']; 

    if($file_error > 0) 
    { 
     die('Upload error or No files uploaded'); 
    } 
    //read from the uploaded file & base64_encode content for the mail 
    $handle = fopen($file_tmp_name, "r"); 
    $content = fread($handle, $file_size); 
    fclose($handle); 
    $encoded_content = chunk_split(base64_encode($content)); 

     $boundary = md5("sanwebe"); 
     //headers 
     $headers = "MIME-Version: 1.0\r\n"; 
     $headers .= "From:".$from_email."\r\n"; 
     $headers .= "Reply-To: ".$reply_to_email."" . "\r\n"; 
     $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 

     //body plain text 
     $body = "--$boundary\r\n"; 
     $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; 
     $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
     $body .= chunk_split(base64_encode($message)); 

     //attachment file 
     $body .= "--$boundary\r\n"; 
     $body .="Content-Type: $file_type; name=".$file_name."\r\n"; 
     $body .="Content-Disposition: attachment; filename=".$file_name."\r\n"; 
     $body .="Content-Transfer-Encoding: base64\r\n"; 
     $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; 
     $body .= $encoded_content; 
    $sentMail = @mail($recipient_email, $subject, $body, $headers); 
    if($sentMail) //output success or failure messages 
    {  
     die('Thank you for your email'); 
    }else{ 
     die('Could not send mail!'); 
    } 
} 
?> 
관련 문제