Beste OMT-ers. Waarschijnlijk kan ik deze vraag beter neerleggen op een specifiek PHP forum, maar ik hou er niet zo van om ergens een account aan te maken om eenmalig een vraag neer te leggen en aangezien ik hier al bijna 10 jaar lid ben probeer ik het eerst maar eens bij de specialisten op OMT. ;-)
Ik heb een script op mijn server staan dat iedere 24 uur (middels een cron-job) de Garfield cartoon van die dag van ucomics.com plukt, het opslaat in een folder op mijn server en per e-mail naar mij toe stuurt.
De Garfield cartoons zijn op werkdagen en zaterdag in GIF formaat en op zondag in JPG formaat. Mijn simpele script maakt dat onderscheid ook op basis van weekdag en de betreffende plaatjes worden ook allemaal correct opgeslagen op de server.
In de mail gaat het echter steevast mis met de GIF plaatjes terwijl JPG gewoon goed binnen komt. Een mail met een JPG bijlage (op zondag) komt gewoon zo binnen...
[img]/uploads/community/4cfb559aaaa1e35689e3522a9b44a373a17bcc4a_9971.png[/img]
...maar een GIF wordt niet als afbeelding gezien maar gewoon als ruwe data (lijkt het) in de e-mail gepropt...
[img]/uploads/community/c92c1f3d32658b0fb51dadf2443273c0449c5533_9971.png[/img]
Ik kan echt niet vinden waar het verschil nu precies zit. Het zal ongetwijfeld met het content-type te maken hebben, maar volgens diverse bronnen is "image/gif" gewoon correct.
Wie oh wie heeft meer kennis van PHP, mime-types e.d. om mijn script te debuggen? Uiteraard staan in het script op mijn server gewoon mijn werkelijke e-mail adressen.
[code]
<?php
// GARFIELD CARTOON RIPPER
$year2=date("y");
$year4=date("Y");
$month=date("m");
$day=date("d");
$weekday=date("w");
$type="gif";
if ($weekday==0) $type="jpg";
$filename="ga$year2$month$day.$type";
$source = "http://images.ucomics.com/comics/ga/$year4/$filename";
$destination = "data/media/garfield/$year4/$filename";
$data = file_get_contents($source);
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
$to = 'mijn.adres@provider.com'; // receipient adress
$subject = $filename;
$random_hash = md5(date('r', time()));
$headers = "From: afzender@mijnserver.com\r\nReply-To: mijn.adres@provider.com";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents("data/media/garfield/$year4/$filename")));
ob_start(); //Turn on output buffering
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
This is plain text.
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
<p>This is <b>HTML</b></p>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: image/<? echo $type; ?> name="<?php echo $filename; ?>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
// echo $mail_sent ? "Mail sent" : "Mail failed";
?>
[/code]