[PHP]Jak wysłać email z załącznikami

0

Witam w jaki sposób przy pomocy funkcji mail() mógłbym wysyłać maile z załącznikami ze zwykłym mailem nie ma problemu nie wiem jednak jak wysyłąć po wypelnieniu formularza na stronie maila z kilkoma załączonymi do niego zdjęciami.

0

da się, popatrze do książki i postaram się jak najszybciej ci odpowiedzieć.

0

Z komentarzy manuala php:

you might want to send some attachments (mainly JPG or GIF files) or anything else generated by an HTML-form via PHP. I couldn't find anything suitable in the mailing list so here we go:

------------------------------------------------- 
$email_address = "Recievers email"; 
$email_from = "Senders email"; 
$subject = "Any subject you like!"; 
$msg = "Text message shown in email"; 
$attach_filepath = "path to existing picture files. Should be an array!"; 
------------------------------------------------- 
function xmail($email_address,$email_from,$subject,$msg,$attach_filepath) { 
       $b = 0; 
       $mail_attached = ""; 
       $boundary = md5(uniqid(time(),1))."_xmail"; 
       if (count($attach_filepath)>0) { 
           for ($a=0;$a<count($attach_filepath);$a++) { 
               if ($fp = fopen($attach_filepath[$a],"rb")) { 
                   $file_name = basename($attach_filepath[$a]); 
                   $content[$b] = fread($fp,filesize($attach_filepath[$a])); 
                   $mail_attached .= "--".$boundary."\r\n" 
                       ."Content-Type: image/jpeg; name="$file_name"\r\n" 
                       . "Content-Transfer-Encoding: base64\r\n" 
                       . "Content-Disposition: inline; filename="$file_name"\r\n\r\n" 
                       .chunk_split(base64_encode($content[$b]))."\r\n"; 
                   $b++; 
                   fclose($fp); 
               } else { 
                   echo "NEIN"; 
               } 
           } 
           $mail_attached .= "--".$boundary." \r\n"; 
           $add_header ="MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary="$boundary""; 
           $mail_content = "--".$boundary."\r\n" 
                       . "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n" 
                       . "Content-Transfer-Encoding: 8bit\r\n\r\n" 
                       . $msg."\r\n\r\n".$mail_attached; 
           return mail($email_address,$subject,$mail_content,"From: ".$email_from."\r\n".$add_header); 
       } else { 
           return mail($email_address,$subject,$msg,"From: ".$email_from); 
       } 
} 
0

To będzie chyba mało mądre pytanie, ale php zająłem się wczoraj więc wybaczcie:
Jak sprawić w php aby ankieta zrobiona w htmlu (form) poszła na maila?
Z góry THX za pomoc.

Ps: załóżmy, że ta ankieta to

<form action="plik.php" method="post" enctype="application/x-www-form-urlencoded"> <iunput type="text" name="miasto"> <input type="checkbox" name="duże"> <input type="checkbox" name="małe"> <input type="submit" name="wyślij" value="wyślij"> </form>
0

PHP ci wtedy zbedne:

<form action="&lt;b">mailto:[email protected]</b>" method="post" enctype="application/x-www-form-urlencoded"> <iunput type="text" name="miasto"> <input type="checkbox" name="duże"> <input type="checkbox" name="małe"> <input type="submit" name="wyślij" value="wyślij"> </form>
0

ja tak wysyłam z załącznikiem:
pliki które chcesz załączyć w tym wypadku muszą być fotkami *.jpg i znajdować się w tablicy $pliki[];

    
        $head = "From: [email protected]\n";
        $head = $head . "X-Mailer: PHP\n"; 
        $head = $head . "MIME-version: 1.0\n"; 
        $head = $head . "Content-type: multipart/mixed; "; 
        $head = $head . "boundary=\"$boundary\"\n"; 
        $head = $head . "Content-transfer-encoding: 7BIT\n"; 

// Jeszcze tylko treść wiadomości i  możemy słać pocztę  

        $mesg = "--" . $boundary . "\n";    //pamiętamy dwa minusy na początku 
        $mesg = $mesg . "Content-Type: text/plain; charset=\"iso-8859-2\"\n\n";
        $mesg = $mesg . $message . "\n"; 
        $do_rozmiar=0;
        $wyslano=count($pliki);
        for($i=0;$i<count($pliki);$i++)
        {
        $rozmiar=filesize($pliki[$i]);
        if($rozmiar>204800)
        {
        echo("<i>Nie dodano zdjęcia $plik[$i] - jego rozmiar był za duży !</i><br>");
        $wyslano=$wyslano-1;
        } else
        {
        $do_rozmiar=$do_rozmiar+$rozmiar;
        $mesg = $mesg . "\n";
        $mesg = $mesg . "--" . $boundary . "\n";    //pamiętamy dwa minusy na początku
        $mesg = $mesg . "Content-type: image/pjpeg; name=\"$plik[$i]\";\n";
        //image/pjpeg
        $file_nn="galeria/$katalog_fotek/$plik[$i]";
        $mesg = $mesg . "Content-Transfer-Encoding: base64\n";
        $mesg = $mesg . "Content-disposition: attachment; filename=\"$plik[$i]\"\n\n";
        $mesg = $mesg . fileopenanddecode($file_nn) . "\n";   //czytamy plik i go kodujemy
        }
        }
        $mesg = $mesg . "--" . $boundary . "-- \n"; //pamiętamy dwa minusy na początku  i na końcu
//funkcja odczytująca plik i kodująca go d o formatu base64 zgodnie z RFC 2045 
    function fileopenanddecode($file) { 
        if (is_readable($file)) { 
             $fd = fopen($file, "r"); 
             $plik = fread($fd, filesize($file)); 
             $encoded = chunk_split(base64_encode($plik)); 
             fclose($fd);     
        } 
        return $encoded; 
    } 

// i to wszystko teraz tylko  
mail($email, "Fotki ze strony ****", $mesg, $head);

wystarczy zmienić typ pliku i możesz wysyłać wszystko co chcesz :]

0

:-| Po co się bawić w kod. SKorzystajcie z darmowego dodatku o nazwie PHPMailer i wszystko będziecie mogli zrobić a dodatek zajmie się wszystkim :)

0
prgtw napisał(a)

:-| Po co się bawić w kod. SKorzystajcie z darmowego dodatku o nazwie PHPMailer i wszystko będziecie mogli zrobić a dodatek zajmie się wszystkim :)

po co programować skoro i tak (prawie)wszystko zostało juz napisane ? ;)

0
Kooba napisał(a)

po co programować skoro i tak (prawie)wszystko zostało juz napisane ? ;)

Właśnie :d idźcie na piwo [rotfl] Ale nie tak na serio: niemal wszystko już zostało napisane, ale jeżeli chcecie coś robić dla treningu swoich umiejętności to piszcie własny kod, ale jak dla realizaji konkretnego celu po co główkować. Jeżeli chcecie szybko postawić stronę WWW to korzystajcie z gotowców i na pewno będzie lepsza, bo nad gotowcami dość często pracuje kilku ludzi i ich skrypty są stabilniejsze, szybsze i bezpieczniejsze. Dobra kończę bo zaraz artykuł powstanie ;)

0

No a jak dodaćdo tresci html?

0
spin napisał(a)

PHP ci wtedy zbedne:

<form action="&lt;b">mailto:[email protected]</b>" method="post" enctype="application/x-www-form-urlencoded"> <iunput type="text" name="miasto"> <input type="checkbox" name="duże"> <input type="checkbox" name="małe"> <input type="submit" name="wyślij" value="wyślij"> </form>

No tak nie do końca szczerze mówiąc. Dlaczego? A no dlatego, że w ten sposób to przeglądarka próbuje wysłać tego maila. Wykorzystując do tego domyślny program pocztowy. Który jeśli nie jest skonfigurowany, to nie zadziała. Ja kiedyś napisałem coś takiego do przesyłania mailem formularza z poziomu PHP. Wygląda to tak:

<?
$address = 'tutaj adres, na który chcesz wysłać';
$subject = 'tytuł maila';
$message = 'tutaj możesz dołączyć jakiśnagłówek informujący o tym, że mail jest wysłany z formularza'."\n";
foreach($_POST as $name => $value) if(!empty($value) && ($name!='submit')) $message.=str_replace('_', ' ', $name).': '.$value."\n"; //Dodanie wszystkich pól formularza do wiadomości
$header = 'From: '+'tutaj podajesz informację o tym, skąd pochodzi list (nagłówek Od albo From)';

if(mail($address, $subject, $message, $header)) header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".'index.php?page=7'); //Page nr 7 - mail suceeded
else header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".'index.php?page=8'); //Page nr 8 - mail error
//Przekierowywanie na odpowiednie strony informujące, że mail został wysłany albo nie
exit;
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1