I'm trying to create a cron job that sends an email with a file attachment once a day.
I'm using a simple PHP script to test this and it works fine when I go to the URL and run it. However, when running it via the cron job, the email is sent but not the file attachment.
Here's my PHP script
Please note I've changed info to protect my client, so I use a real email, not test@example.com
just so you don't think that's why it's not working.
<?php
// Recipient
$to = 'test@example.com';
// Sender
$from = 'noreply@example.com';
$fromName = 'Server';
// Email subject
$subject = 'Test Subject';
// Attachment file
$file = "../test/file.csv";
// Email body content
$htmlContent = '
<h3>Test Email</h3>
<p>Please find the attached file.</p>
';
// Header for sender info
$headers = "From: $fromName"." <".$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 = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n";
// Preparing attachment
if(!empty($file) > 0){
if(is_file($file)){
$message .= "--{$mime_boundary}\n";
$fp = @fopen($file,"rb");
$data = @fread($fp,filesize($file));
@fclose($fp);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" .
"Content-Description: ".basename($file)."\n" .
"Content-Disposition: attachment;\n" . " filename=\"".basename($file)."\"; size=".filesize($file).";\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
}
}
$message .= "--{$mime_boundary}--";
$returnpath = "-f" . $from;
// Send email
$mail = @mail($to, $subject, $message, $headers, $returnpath);
?>
Thanks in advance.