-1

This code to send an html file as an attachment is working properly. However in the next code snippet,when I cahnge the attachment to an image it is not being sent.Why is it so?

<?php
$file_path = "file.html"; // server path where file is placed
$file_path_type = "text/html"; // File Type
$file_path_name = "newfilename.html"; // this file name will be used at reciever end 

$from = "xyz@gmail.com"; // E-mail address of sender
$to = "abc@gmail.com"; // E-mail address of reciever
$subject = "Please check the Attachment."; // Subject of email
$message = "This is the message body.&lt;br&gt;&lt;br&gt;Thank You!&lt;br&gt;&lt;a href='http://7tech.co.in'&gt;7tech.co.in Team&lt;/a&gt;"; 

$headers = "From: ".$from; 

$file = fopen($file_path,'rb');
$data = fread($file,filesize($file_path));
fclose($file); 

$rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$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/html; 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: {$file_path_type};\n" .
" name=\"{$file_path_name}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$file_path_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data .= "\n\n" .
"--{$mime_boundary}--\n";  

if(@mail($to, $subject, $message, $headers)) {
echo "File send!";

} else {
echo 'Failed';
}
?>

Now when I change the attached file to an image i.e. screenshot.png it fails to send the message.

<?php
    $file_path = "screenshot.png"; // server path where file is placed
    $file_path_type = "image/png"; // File Type
    $file_path_name = "screenshot.png"; // this file name will be used at reciever end 

    $from = "xyz@gmail.com"; // E-mail address of sender
    $to = "abc@gmail.com"; // E-mail address of reciever
    $subject = "Please check the Attachment."; // Subject of email
    $message = "This is the message body.&lt;br&gt;&lt;br&gt;Thank You!&lt;br&gt;&lt;a href='http://7tech.co.in'&gt;7tech.co.in Team&lt;/a&gt;"; 

    $headers = "From: ".$from; 

    $file = fopen($file_path,'rb');
    $data = fread($file,filesize($file_path));
    fclose($file); 

    $rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$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/html; 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: {$file_path_type};\n" .
    " name=\"{$file_path_name}\"\n" .
    "Content-Disposition: attachment;\n" .
    " filename=\"{$file_path_name}\"\n" .
    "Content-Transfer-Encoding: base64\n\n" .
    $data .= "\n\n" .
    "--{$mime_boundary}--\n";  

    if(@mail($to, $subject, $message, $headers)) {
    echo "File send!";

    } else {
    echo 'Failed';
    }
    ?>

Can you guys point out the error.I've tried to cahnge content type too at 1-2 places but it wasn't working.Am I missing anything?

user2280276
  • 123
  • 1
  • 2
  • 7

1 Answers1

1

Consult PhpMailer vs. SwiftMailer?

You can of course keep using your fiddly manual mail construction code. But then please don't unload the extra debugging effort onto others. Your choice, your problem.

If you are slightly clever, use one of the existing solutions instead of band-aid code.

Community
  • 1
  • 1
mario
  • 141,508
  • 20
  • 234
  • 284
  • Agreed. There are easy-to-use, well-tested libraries that do all of this for you. – ceejayoz Apr 20 '13 at 18:31
  • well don't tell me its not possible.Plz tell me the error.I wish to learn it this way.I may use phpmailer or swift later! But what's the error in this code! – user2280276 Apr 20 '13 at 18:36
  • 1
    @user2280276 Of course it's possible. But you can first sift through the [hundreds of duplicates we have on this](http://www.google.com/search?q=site:stackoverflow.com+php%20mail%20attachment%20mime%20boundary) yourself. You didn't do this yet. And it's probably of little help, since they're all *too localized*, just like your question. – mario Apr 20 '13 at 19:17