2013-06-24 71 views
1

我想通过php邮件功能发送带有附件的邮件。我可以收到一封邮件。不幸的是图像被破坏了。该图像与php脚本位于同一目录中。为脚本用PHP中的附件发送邮件

我的源代码:

$name = "Name goes here"; 
$email = "[email protected]"; 
$to = "$name <$email>"; 
$from = "Sender"; 
$subject = "Here is your attachment"; 
$fileatt = "test.jpg"; 
$fileatttype = "image/jpeg"; 
$fileattname = "test.jpg"; 
$headers = "From: $from"; 

// File 
$file = fopen($fileatt, 'rb'); 
$data = fread($file, filesize($fileatt)); 
fclose($file); 

// This attaches the file 
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
$headers .= "\nMIME-Version: 1.0\n" . 
"Content-Type: multipart/mixed;\n" . 
" boundary=\"{$mime_boundary}\""; 
$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"; 

$data = chunk_split(base64_encode($data)); 
$message .= "--{$mime_boundary}\n" . 
"Content-Type: {$fileatttype};\n" . 
" name=\"{$fileattname}\"\n" . 
"Content-Disposition: attachment;\n" . 
" filename=\"{$fileattname}\"\n" . 
"Content-Transfer-Encoding: base64\n\n" . 
$data . "\n\n" . 
"-{$mime_boundary}-\n"; 

// Send the email 
if(mail($to, $subject, $message, $headers)) { 

    echo "The email was sent."; 

} 
else { 

    echo "There was an error sending the mail."; 

} 

跟着这个教程: http://www.texelate.co.uk/blog/send-email-attachment-with-php/

+0

尝试与图像附件绝对路径。 – Naeem

+0

请参考http://webcheatsheet.com/PHP/send_email_text_html_attachment.php –

+0

我试过绝对路径。它不起作用。有一个附件,它被打破了。 – JavaForAndroid

回答

-3
$fileatt = "your folder name/test.jpg"; 

<?php 

     $files = array(
        "yourfoldername/yourfilename.png", 
        "yourfoldername/yourfilenamepng" 
       ); 
        //1431347258selfie_1431347013130.png 

    // email fields: to, from, subject, and so on 
    $to   = "[email protected]"; 
    $from  = "[email protected]"; 
    $subject = "My subject"; 
    $message = "My message"; 
    $headers = "From: $from"; 

    // boundary 
    $semi_rand  = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    // headers for attachment 
    $headers  .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

    // multipart boundary 
    $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"; 
    $message .= "--{$mime_boundary}\n"; 

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

    // send mail 
    if(mail($to, $subject, $message, $headers)) 
    { 
     $somthing = "Mail successfully Send."; 
    } 
    else 
    { 
     $somthing = "Mail sending fail."; 
    } 
    echo $somthing; 

>