Avatar billede sebster Nybegynder
14. april 2005 - 11:11 Der er 34 kommentarer og
1 løsning

Send fil via mail

Hej eksperter, jeg har spurgt før, men har virkelig et problem. Kan godt få vedhæftet text og headers, men min body tekst er ikke med. Hvad gør jeg forkert???

Mit script ser således ud:

<?php

$besked=$_POST['mes'];

$mail="min@mail.dk";

$boundary = uniqid('');
$mimeType = ($_FILES['filen']['type'] ? $_FILES['filen']['type'] : 'application/unknown');
$file = fread(fopen($_FILES['filen']['tmp_name'], 'r'), filesize($_FILES['filen']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$body = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= $besked."\n\n";
$body .= "--$boundary\n";

$body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
$body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $file."\n\n";
$body .= "--$boundary--\n";

$headers = "Content-type: multipart/mixed; boundary=\"$boundary\"\n";
$headers .= "Content-transfer-encoding: 8bit\n";
$headers .= "From: Monkey <info@monkey.dk> \n";
$headers .= "Reply-To: info@monkey.dk \n";

mail($mail, $_POST['sub'], $body, $headers);

echo "den blev sendt!!! ";
Avatar billede bojo Nybegynder
14. april 2005 - 11:28 #1
dette virker:


<?
$emne = "Test";
$besked = "Testmail med vedhæftet fil";
$fil_name = "test.txt";
$til = "email@email.dk";

$boundary = uniqid("");
if ($filen_type) {
$mimeType = $filen_type;
} else {
$mimeType =  "application/unknown";
}

$fil_var = fread(fopen($fil_name, "rb"), filesize($fil_name));
$fil_var = base64_encode($fil_var);
$fil_var = chunk_split($fil_var);
$body  = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= "$besked";
$body .= "\n\n--$boundary\n";
$body .= "Content-type: $mimeType; name=$fil_name\n";
$body .= "Content-disposition: attachment; filename=$fil_name\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $fil_var."\n\n";
$body .= "--$boundary--";
$headers = "From: \"Test\" <" . $fra . ">\r\n";

if ($reply){
$headers .="Disposition-Notification-To: " . $til . "\r\n";
}
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
$headers .= "X-Mailer: PHP/";
$modtager = $til;

mail($modtager,$emne,$body,$headers);
?>
Avatar billede sebster Nybegynder
14. april 2005 - 11:41 #2
Der kommer denne fejl frem:

Warning: fopen(): Unable to access test.txt in /var/www/www.domain.dk/www/admin/tester.php on line 15

Warning: fopen(tester.txt): failed to open stream: No such file or directory in /var/www/www.domain.dk/www/admin/tester.php on line 15

Warning: filesize(): Stat failed for tester.txt (errno=2 - No such file or directory) in /var/www/www.domain.dk/www/admin/tester.php on line 15

Warning: fread(): supplied argument is not a valid stream resource in /var/www/www.domain.dk/www/admin/tester.php on line 1
Avatar billede sebster Nybegynder
14. april 2005 - 11:48 #3
Jeg er heller ikke hlet med på hvornår $filen_type er repræsenteret????
Avatar billede bojo Nybegynder
14. april 2005 - 13:02 #4
du skal jo rette i toppen:

$emne = "Test";
$besked = "Testmail med vedhæftet fil";
$fil_name = "test.txt";
$til = "email@email.dk";
Avatar billede sebster Nybegynder
14. april 2005 - 13:04 #5
det har jeg også gjort. Ændrede det således:
$emne = "Test";
$besked = $_POST['mes'];
$fil_name = $_FILES['filen']['type'];
$til = "min@mail.dk";

men det virkede ikke!!!
Avatar billede bojo Nybegynder
14. april 2005 - 13:36 #6
For at se om du gør det du tror du gør, så prøv at udskriv indholdet af dine vars:

...

$fil_name = $_FILES['filen']['type'];
$til = "min@mail.dk";

echo "<br />Besked: " . $besked . "<br />Fil: " . $fil_name . "<br />";
exit;
Avatar billede sebster Nybegynder
14. april 2005 - 18:53 #7
beskedet bliver udskrevet fint og $fil_name siger:  image/jpeg passer det ikke????
Avatar billede bojo Nybegynder
14. april 2005 - 19:46 #8
nope, $file_name skal være navnet på den fil du skal sende
Avatar billede sebster Nybegynder
14. april 2005 - 19:55 #9
Skal den så ikke hentes med $_FILES['filen']['name'] ???
Avatar billede bojo Nybegynder
14. april 2005 - 20:25 #10
mon ikke det er $_FILES['upload']['name']
Avatar billede sebster Nybegynder
14. april 2005 - 20:26 #11
jeg har kaldt feltet "filen" så må det jo være den ik???
Avatar billede bojo Nybegynder
14. april 2005 - 21:21 #12
jep, du har ret, men indholdet er jo tydeligvis forkert

Hov - du skal tjekke $_FILES['upload']['name'] og ikke $_FILES['filen']['type']; som jeg skrev - sorry
Avatar billede sebster Nybegynder
14. april 2005 - 22:30 #13
Du mener $_FILES['filen']['name' ik???]
Avatar billede bojo Nybegynder
14. april 2005 - 23:30 #14
ups igen, jo name :-)
Avatar billede sebster Nybegynder
15. april 2005 - 10:46 #15
I det eksempel du sendte har du da defineret:

$filen_type= $_FILES['fil']['type']

$fil_name=$_FILES['fil']['name']

????
Avatar billede sebster Nybegynder
15. april 2005 - 10:58 #16
Kan du ikke sende dit fulde script som virker???
Avatar billede bojo Nybegynder
15. april 2005 - 11:41 #17
det har jeg gjort 14/04-2005 11:28:53 men det er ikke med en form, det er med hardkodedet filnavn
Avatar billede bojo Nybegynder
15. april 2005 - 11:42 #18
ikke at det egentlig skulle gøre en forskel hvis man får det rigtige filnavn (og path) fra formen
Avatar billede sebster Nybegynder
15. april 2005 - 11:46 #19
Det er bare fordi jeg ikke kan få det til at virke. Tænkte om der manglede noget???
Avatar billede bojo Nybegynder
15. april 2005 - 12:34 #20
her fundet en "stump" med form som virker



<?PHP

// Hvis din mail er sendt.
if(isset($_POST[afsend])) {

    $fil = $_FILES['fileatt']['name'];
    $fra = $_POST[email];
    $til = $_POST[modtager];
    $emne = $_POST[emne];
    $besked = $_POST[indhold];

    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");

    // Siden det er en tekstfil, kender vi allerede MIME typen
    $mimeType =  "application/unknown";

    // Læs filen ind i en variable
    $fil_var = fread(fopen($_FILES['fileatt']['tmp_name'], "r"), filesize($_FILES['fileatt']['tmp_name']));

    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);

    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);

    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";

    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";

    // Vi sætter body-texten ind her
    $body .= $besked."\n\n";

    // Slut på brødteksten
    $body .= "--$boundary\n";

    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$fil."\n";

    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$fil."\n";

    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";

    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";

    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";

    // Vi definerer from-headeren
    $headers  = "From: ".$fra."<".$fra.">\n";

    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";

    // Hvis mailen bliver sendt afsted problemfrit
    if (mail($til, $emne, $body, $headers)) {
        echo "Mailen er sendt!";

    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }
}
?>

<html>
<head>
  <meta name="Generator" content="Stone's WebWriter 4" />
</head>
<body>
  <form action="" method="post" enctype="multipart/form-data">
  Afsenders email: <input type="text" name="email"><br>
  Modtagers email: <input type="text" name="modtager"><br>
  Emne i mail: <input type="text" name="emne"><br>
  Teksten i mailen: <input type="text" name="indhold"><br>
  Filen: <input type="file" name="fileatt"><br>
  <input name="afsend" type="submit" value="Send email">
  </form>
</body>
</html>
Avatar billede sebster Nybegynder
11. maj 2005 - 13:22 #21
Jeg får en besked der hedder:

Parse error: parse error, unexpected T_STRING in /customers/me.dk/me.dk/httpd.www/mail.php on line 6,

Så det script virker da slet ikke.
Avatar billede bojo Nybegynder
11. maj 2005 - 13:56 #22
Scriptet virker uden problemer hos mig, så det er da sært-

hvis dette script står alene som det er, så er linie 6:

$fil = $_FILES['fileatt']['name']; 

og den er der ingen uventede tekst-strenge i. Har du rettet i det?
Avatar billede bojo Nybegynder
11. maj 2005 - 13:59 #23
opdager lige at linie 7... godt kan (bør) ændres til

    $fra = $_POST['email'];
    $til = $_POST['modtager'];
    $emne = $_POST['emne'];
    $besked = $_POST['indhold'];

dvs. ' omkring "indeks", men det udløser max. en warning
Avatar billede sebster Nybegynder
12. maj 2005 - 10:03 #24
Nu har jeg prøvet igen og igen, men der sker igen ændring. Kunne du ikke være sød at lægge de komplette filer op. Kan slet ikke få styr på det.
Avatar billede bojo Nybegynder
13. maj 2005 - 10:04 #25
jamen den komplette fil er den fra:

Kommentar: bojo
15/04-2005 12:34:11

prøv den på www.l4.dk/sendfil

( hmm - ikke en køn form, men skidtet virker )
Avatar billede sebster Nybegynder
17. maj 2005 - 10:09 #26
Har stadig problemer med at få lagt. mit upload script op. Den sender ikke teksten. kan du ikke lige åbne for din sender igen.
Avatar billede bojo Nybegynder
17. maj 2005 - 10:26 #27
done
Avatar billede bojo Nybegynder
17. maj 2005 - 10:27 #28
men forresten, det er jo kun så du kan se at scriptet virker :-)
Avatar billede sebster Nybegynder
18. maj 2005 - 09:52 #29
Jeg syntes ikke den blev åbnet??? Kunne jeg få dig til at maile scriptet til mig. Det kikser helt for mig. Ved du evt. om der er forskel på om du sender det fra andre servere eller noget i den duer????
Avatar billede bojo Nybegynder
18. maj 2005 - 15:02 #30
Den har været åbnet og brugt 5 gange siger min log.

Drop din mail så sender jeg det gerne, men det er 100% det samme script som jeg lagde her på siden 15/04-2005 12:34:11
Avatar billede sebster Nybegynder
19. maj 2005 - 09:18 #31
okay, jeg kan bare ikke forstå hvad jeg gør galt. min mail er sebplehn@hotmail.com. Fedt hvis du bare vil sende den som zip.

Og ja kunne godt se den virkede alligevel. Jeg takker mange gange. Og smid venligst et svar så jeg du kan få pointene. Det fortjener du.
Avatar billede bojo Nybegynder
19. maj 2005 - 09:33 #32
Nej tak, svar selv og husk at acceptere svaret ;-)

og jeg sender straks
Avatar billede sebster Nybegynder
19. maj 2005 - 09:42 #33
Okay jeg takker endnu engang.
Avatar billede sebster Nybegynder
19. maj 2005 - 14:07 #34
Så kom det til at virke, ved ikke hvad jeg har gjort galt, men må lige tjekke op på det. Takker endnu engang.
Avatar billede sebster Nybegynder
30. maj 2005 - 11:26 #35
Endnu et spørgsmål, hvis man gerne vil sende flere filer kan dette nemt sættes op til dette eller er det håbløst. Jeg har prøvet at ændre lidt i scriptet og sat ny boks ind, men det virker ikke, Sender kun den ene fil.
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