Avatar billede codeadmin Nybegynder
30. august 2010 - 18:48 Der er 8 kommentarer og
1 løsning

vedhæfte pdf til mail, lavet via php

Hej,

har dette script


<?php
$fileatt = "/home/sites/MIT SITE.dk/public_html/tester/"; // Path to the file
$fileatt_type = "application/pdf"; // File Type
$fileatt_name = "1.pdf"; // Filename that will be used for the file as the attachment

$email_from = "afsender mail <email@ja.dk>"; // Who the email is from
$email_subject = "Til dig, fra mig"; // The Subject of the email
$email_message = "Hej,<br><br><br>";
$email_message .= "med dig"; // Message that the email has in it

$email_to = "codeadmin@gmail.com"; // Who the email is to

$headers = "From: ".$email_from;

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

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

$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";

$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"utf-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$email_message .= "\n\n";

$data = chunk_split(base64_encode($data));

$email_message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data .= "\n\n" .
"--{$mime_boundary}--\n";

$ok = @mail($email_to, $email_subject, $email_message, $headers);

if($ok) {
echo "<font face=verdana size=2><center>You file has been sent<br> to the email address you specified.<br>
Make sure to check your junk mail!<br>
Click <a href=\"#\" onclick=\"history.back();\">here</a> to return to mysite.com.</center>";

} else {
die("Sorry but the email could not be sent. Please go back and try again!");
}
?>

Som skal vedhæfte filen 1.pdf og det fungere egentlig fint nok, og den sender som den skal. Men når jeg forsøger at åbne filen så skriver den at den er beskadiget. Har fundet nogle tråde med det men synes ikke at kunne fange hvad der er gjort galt.


Nogen som kan fortælle evt, rette hvis det er "bare" lide?
Avatar billede Slettet bruger
30. august 2010 - 19:45 #1
Jeg lytter lige med, ikk : )

Tror det må skyldes at chunk_split() skal i en loop...
- eller at $mime_boundary skal ind som 3. parameter i kaldet til den...
Avatar billede nemlig Professor
30. august 2010 - 19:56 #2
Jeg ved ikke om denne kode hjælper jer, men hos mig virker det fint.


$to = " ".$row2['eanemail']." ";
$from = " ".$row2['hyttenavn']." <".$row2['emailudlejer'].">";
$subject = "Påmindelse";
   
$fileatt = "pdf/$row[id].pdf";
$fileatttype = "application/pdf";
$fileattname = "$row[id].pdf";
   
$headers = "From: $from";

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

$semi_rand = md5( time() );
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
   
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
   
$message1 = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message1 . "\n\n";
 
$data = chunk_split( base64_encode( $data ) );

$message1 .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatttype};\n" .
" name=\"{$fileattname}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$fileattname}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
Avatar billede Slettet bruger
30. august 2010 - 20:13 #3
=> nemlig - Hvor stor en fil sender du ?
Avatar billede codeadmin Nybegynder
30. august 2010 - 20:18 #4
nemlig: hvis jeg tager dit eksempel så ser det sådan her ud:

$to = "Minemail@gmail.com";
$from = "Mig <mig@gmail.com>";
$subject = "Påmindelse";
   
$fileatt = "1.pdf";
$fileatttype = "application/pdf";
$fileattname = "1.pdf";
   
$headers = "From: $from";

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

$semi_rand = md5( time() );
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
   
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
   
$message1 = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message1 . "\n\n";
 
$data = chunk_split( base64_encode( $data ) );

$message1 .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatttype};\n" .
" name=\"{$fileattname}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$fileattname}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";

$ok = @mail($email_to, $email_subject, $email_message, $headers);


det giver mig en internal server error. fjerner jeg sidste linje: $ok så giver den ingen error men sender ej heller nogen.
Avatar billede nemlig Professor
30. august 2010 - 20:24 #5
#3: Det er forskelligt, men typisk under 1 Mbyte
Avatar billede repox Seniormester
30. august 2010 - 22:34 #6
Istedet for at anvende sådan en omgang spaghetti-kode, hvorfor så ikke anvende noget gennemtestet (så du også undgår klient-kompabilitetsproblemer) og slipper for at opfinde den dybe tallerken endnu engang?

Google efter phpmailer - det virker og er nemt at implementere.
Avatar billede nemlig Professor
30. august 2010 - 22:39 #7
#6 Og Italieneren her er også gået over til PHPMailer. Jeg havde bare noget "gammelt" kode, som mindede om trådstarterens, og som måske kan hjælpe. :)
Avatar billede codeadmin Nybegynder
31. august 2010 - 10:23 #8
repox gik over til phpmailer istedet og det fungere til UG kryds og bolle :)

Så kommer du med et svar
Avatar billede repox Seniormester
31. august 2010 - 10:37 #9
Det fik du her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester