Avatar billede torstein Novice
04. maj 2003 - 15:44 Der er 10 kommentarer og
1 løsning

Vedhæftning af filer i mail()

Jeg har flg. script, som skal sende en mail afsted med en vedhæftet fil. Der kommer flg. fejl frem:

Warning: fopen() expects parameter 1 to be string, array given in /home/web/gb1198/test/mail_med_fil.php on line 30

Warning: filesize() [function.filesize]: Stat failed for Array (errno=2 - No such file or directory) in /home/web/gb1198/test/mail_med_fil.php on line 30

Warning: fread(): supplied argument is not a valid stream resource in /home/web/gb1198/test/mail_med_fil.php on line 30


Og scriptet:

        $besked = nl2br($besked);
        while ($row = mysql_fetch_array($result)) {
        $besked = eregi_replace('<br[[:space:]]*/?[[:space:]]*>',"\n", $besked);
        $besked1 = eregi_replace('<br[[:space:]]*/?[[:space:]]*>',"\n", $besked1);

            $boundary = uniqid("");
    if ($filen_type) {
        $mimeType = $filen_type;
    } else {
        $mimeType =  "application/unknown";
    }
    $fil_var = fread(fopen($filen, "r"), filesize($filen));
    $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.$besked1."\n\n";
    $body .= "--$boundary\n";
    $body .= "Content-type: $mimeType; name=$filen_name\n";
    $body .= "Content-disposition: attachment; filename=$filen_name\n";
    $body .= "Content-transfer-encoding: base64\n\n";
    $body .= $fil_var."\n\n";
    $body .= "--$boundary--";
    $headers  = "From: \"$_SESSION[husk_fornavn] $_SESSION[husk_efternavn]\" <$_SESSION[husk_email]>\r\nX-Mailer: PHP/";
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
if ($reply){
    $headers .="Disposition-Notification-To: torstein.rude@get2net.dk\r\n";
}
    $modtager =$row[email];
        mail($modtager,$emne,$body,$headers);
include ("mail_sendt.php");
}}}

if (!$mode){?>

<form action="?list=mail_med_fil.php&mode=send&action=on" enctype="multipart/form-data" method="post">
<input type=hidden name=gruppe value=<? echo $gruppe; ?>>
Vedhæftet fil:<br>
<input type='file' name='filen' size="30"><br>
Emne med vedhæftn:<br>
<input type="text" name="emne" size="30">
<br>
Besked:<br>
<textarea cols="45" rows="10" name="besked" type="text"></textarea>
<br><input type="submit" value="SEND"></form>
<?}?>
Avatar billede Slettet bruger
04. maj 2003 - 16:02 #1
$filen <--- skal være en fil der er gemt på din server... ikke en fil der er overført til serveren via. en formular...
Så du skal først gemme den uploade fil og så læse fra den!
Avatar billede Slettet bruger
04. maj 2003 - 16:09 #2
eller bruge fopen($_FILES['file']['tmp_name'],'r'); i stedet for...
Avatar billede torstein Novice
04. maj 2003 - 16:32 #3
OK, hvor skal rettelsen sættes ind, da det skal være en fil, som ligger på ens egen HDD og ikke serveren, som skal vedhæftes.
Avatar billede Slettet bruger
04. maj 2003 - 16:38 #4
$filepath = $_FILES['file']['tmp_name'];
$fil_var = fread(fopen($filepath, "r"), filesize($filepath));
Hvis det ikke virker er du nød til at gemme filen midlertidigt... (altså sørge for at den bliver slettet igen når mailen er sendt!)
Avatar billede torstein Novice
04. maj 2003 - 16:45 #5
Ja ja, der er kortet ned på fejlmeddelserne:

Warning: filesize() [function.filesize]: Stat failed for (errno=2 - No such file or directory) in /home/web/gb1198/test/mail_med_fil.php on line 31

Warning: fread(): supplied argument is not a valid stream resource in /home/web/gb1198/test/mail_med_fil.php on line 31


Hvis jeg skal bruge den anden løsning (med at gemme midlertidigt), er det noget som kræver meget tid fra din side, og i så fald vil du hjælpe mig. Flere point afsættes gerne, men hvis det mere er et sharksforum-problem, så sig til, da jeg så dropper mine planer
Avatar billede Slettet bruger
04. maj 2003 - 16:53 #6
hmmmm type fejl...
Prøv med:
$filepath = $_FILES['filen']['tmp_name'];
$fil_var = fread(fopen($filepath, "r"), filesize($filepath));
Avatar billede torstein Novice
04. maj 2003 - 16:59 #7
Fejlmeddelelerne er væk, men mailen ser sådan ud ved en vedhæftet zip-fil på 4 Kb:

--3eb52a74e452b
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit


** Denne mail er sendt via de interne sider på www.jc-birkeroed.dk **

--3eb52a74e452b
Content-type: application/x-zip-compressed; name=count.zip
Content-disposition: attachment; filename=count.zip
Content-transfer-encoding: base64

UEsDBAoAAAAAAAaUQysAAAAAAAAAAAAAAAAGAAAAY291bnQvUEsDBBQAAAAIAPeTQyvlrLCT7wEA
AKoDAAAPAAAAY291bnQvY291bnQucGhwjVPBbtswDD07QP6B0AzMQZM4KbAua+MWW9Oil2FA0R2G
LhjcmE6E2ZZnMVmCYr+7b+hxlOi6O1YXmuTj4yMtzTdUFuf93nyDaeYsaSrw/GvlbQYLs9qWWNE8
lgQjSqQUNkT1CH9t9S5Rl6YihozuDjUqWImXKMI9xY7+DFabtLFIibZmNJu9+zCaKscUt03588Fk
B3hYr0xhmkS9ufZHgeNgd+KPr7no9+IYajvmRtuKxrQnsD/TgnuUJsO3FkgX8P7kZDwe93tBqGtI
YI0saRep26vPX+6ufnxcLG7V4MylcwYnoDouJVGOcQYjlxdgWlHqoB7JcYke0BIHSZcYDWAE09lk
4hPGsU6Eba+zdO38XPzWlaIucsyhLCWM1De4hmwIN6daRAa/N6wFolbDOYRmAI8uEYSWGnRkuK8L
Hj9SoIYQ5vehWUptEOicS90aEhD4/WT5XM/inDAZuwMLarp0rdyEHTr4b5iXmj9ixYTm6MgnvOvp
2hK/gE54YdaOJjc1VpFye2bhKm0nDvJ6S5ZrHYzjTr/f0lDM8ffqGSnwVWEstvhB1//VP7IV6kWS
iORbdrPTFsq0Ar6+sPvbIEGGDeRPjVyuIKgbXRGoT2if1qDTgk5BGqiXHWDByh5fCe/3LuRBxO5F
yCORF/oPUEsDBAoAAAAAAASUQysAAAAAAAAAAAAAAAAPAAAAY291bnQvY291bnQudHh0UEsBAhQA
CgAAAAAABpRDKwAAAAAAAAAAAAAAAAYAAAAAAAAAAAAQAMBBAAAAAGNvdW50L1BLAQIUABQAAAAI
APeTQyvlrLCT7wEAAKoDAAAPAAAAAAAAAAEAIACAgSQAAABjb3VudC9jb3VudC5waHBQSwECFAAK
AAAAAAAElEMrAAAAAAAAAAAAAAAADwAAAAAAAAAAACAAgIFAAgAAY291bnQvY291bnQudHh0UEsF
BgAAAAADAAMArgAAAG0CAAAAAA==


--3eb52a74e452b--
Avatar billede Slettet bruger
04. maj 2003 - 17:06 #8
Et eller andet i dine "mimer" som er gået i kage...
På http://www.reginscorner.dk/mails.php#file har jeg lagt en klasse ud som skulle være rimelig let at implementere....
Avatar billede torstein Novice
06. maj 2003 - 16:23 #9
Det var lidt for hard-core til mig det du har lavet. Jeg har byttet lidt rundt på headers, så det nu ser sådan ud, og det virker:


            $boundary = uniqid("");
    if ($filen_type) {
        $mimeType = $filen_type;
    } else {
        $mimeType =  "application/unknown";
    }
$filepath = $_FILES['filen']['tmp_name'];
$fil_var = fread(fopen($filepath, "r"), filesize($filepath));
    $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.$besked1."\n\n";
    $body .= "--$boundary\n";
    $body .= "Content-type: $mimeType; name=$filen_name\n";
    $body .= "Content-disposition: attachment; filename=$filen_name\n";
    $body .= "Content-transfer-encoding: base64\n\n";
    $body .= $fil_var."\n\n";
    $body .= "--$boundary--";
    $headers  = "From: \"$_SESSION[husk_fornavn] $_SESSION[husk_efternavn]\" <$_SESSION[husk_email]>\r\n";
if ($reply){
    $headers .="Disposition-Notification-To: torstein.rude@get2net.dk\r\n";
}
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
    $headers .= "X-Mailer: PHP/";   


    $modtager =$row[email];
        mail($modtager,$emne,$body,$headers);
include ("mail_sendt.php");
}

Mange tak for inspiration og hjælp
Avatar billede sebster Nybegynder
12. maj 2005 - 11:40 #10
jeg kan se at det er noget tid siden du har lavet det her oplæg. Men kunne jeg ikke få dig til at lægge den fulde kode ud. Jeg har nemlig også problemer med dette script. Og kan ikke finde ud af at få det rigtigt på plads.
Avatar billede torstein Novice
13. maj 2005 - 15:48 #11
Ovenstående kode er den endelige, som fungerer - se evt. Regins svar 04.05.2003 17:06 og se hans hjemmeside, den er der meget guf på ,som kan bruges.
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