How to generate CSV file and send as email attachment?

I am coming up with the interesting post today. In our daily programming, we do something that we want to share with everyone so we can make programming simpler by helping each other.

Recently, I worked on a problem where I need to generate CSV file and send as email attachment. We can also send database generated data CSV file to email by using this below method.

See post – How to send form data on email? and How to send an attachment with email in PHP?

Generate CSV file and send as Email attachment

Let’s create an html form first that will generate a CSV file.

<form>
  First name:<br>
  <input type="text" name="firstname">
  <br>
  Last name:<br>
  <input type="text" name="lastname">
   Email: <br>
  <input type="text" name="email">
</form>

Let’s put some PHP form submission code –

<?php
$email=$_POST['email'];
$firstName=$_POST['firstName'];
$lastName=$_POST['lastName'];

$to = "sample@ecomspark.com";
$subject = "Send Form data as CSV attachment and send email ";

$message = "".
"Email: $email" . "\n" .
"First Name: $firstName" . "\n" .
"Last Name: $lastName";

Let’s write CSV generation and php attachment code –

//The Attachment

$cr = "\n";
$data = "Email" . ',' . "First Name" . ',' . "Last Name" . $cr;
$data .= "$email" . ',' . "$firstName" . ',' . "$lastName" . $cr;

$fp = fopen('file.csv','a');
fwrite($fp,$data);
fclose($fp);

//Make the attachment
$attachments[] = Array(
   'data' => $data,
   'name' => 'file.csv',
   'type' => 'application/vnd.ms-excel'
);


//Generate a boundary string

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


//Add the headers for a file attachment


$headers = "MIME-Version: 1.0\n" .
           "From: {$from}\n" .
		     "Cc: emaito@domain.com\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/html; charset=\"iso-8859-1\"\n" .
          "Content-Transfer-Encoding: 7bit\n\n" .
          $text . "\n\n";


//Add sttachments

foreach($attachments as $attachment){
   $data = chunk_split(base64_encode($attachment['data']));
   $name = $attachment['name'];
   $type = $attachment['type'];

   $message .= "--{$mime_boundary}\n" .
              "Content-Type: {$type};\n" .
              " name=\"{$name}\"\n" .              

              "Content-Transfer-Encoding: base64\n\n" .
              $data . "\n\n" ;
}

$message .= "--{$mime_boundary}--\n";
mail($to, $subject, $message, $headers);
?>

Put together above code and you will be able to generate csv file and send as email attachment in PHP. Please write in comment for any query.

Leave a Reply