How to Generate a CSV File From Form Data Send as an Email Attachment
If you've aggregated some great data, learn how to quickly pack it up and ship it out using PHP.
Join the DZone community and get the full member experience.
Join For FreeI wrote this post because, in our daily programming, we do things that we want to share with everyone so we can make programming simpler by helping each other.
Recently, I worked on a task where I needed to generate a CSV file from a Form and then send it on an email. We can also send database generated data CSV file to email by using this below method.
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 code to create a PHP form submission:
<?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 the code for CSV generation and PHP attachment:
<?php
//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 the above code and you will be able to generate and email CSV files in PHP. Please feel free to ask any questions in the comments section.
Opinions expressed by DZone contributors are their own.
Comments