Problem z załącznikiem w meilu


(Aglasek) #1

Witam

Mam problem z załącznikiem w meilu.

  1. mianowicie widzę że załącznik jest jednak podczas otwierania go jest jakiś błąd i nie można go otworzyć.

  2. jak zrobić aby można było przesłać dowolny typ pliku np. pdf, doc itp a nie tylko jak mam do tej pory jpg

  3. jak ustawić w tej funkcji kodowanie polskich znaków dla treści

Oto moja funkcja:

$target_path = basename( $_FILES['file']['name'] );

        if($target_path){

            $fileatt = $target_path; //sciezka do pliku

            $fileatt_type = "image/jpg"; // typ zalacznika


            $fileatt_name = $target_path; // nazwa zalacznika


            $email_from = $email_who; // Who the email is from

            $email_subject = $nr_rma; // The Subject of the email


            $email_to = $email_customer; // Who the email is too


            $headers = "From: " . $first_last_name . "<" . $email_who . ">";


            $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-Versio: 1.0r\n"."Content-type: text/html; charset=UTF-8\r\n" .

            "--{$mime_boundary}\n" .


            "Content-Transfer-Encoding: 7bit\n\n" .

            $email_message . $text_to_client ."\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";

            $email_message .= "";

            mail($email_to, $email_subject, $email_message, $headers);

        }

(kuba3351) #2

1.Nie napisałeś jaki błąd.Napisz jego treść albo daj screena

2.Z jakiej poczty korzystasz? (chodzi mi o to czy masz na Onecie, wp, gmail, o2 czy na czymś innym, i napisz jeszcze czy korzystasz z poczty, w przeglądarce internetowej, czy masz jakiegoś klienta e-mail)


(Aglasek) #3

Błąd to: Can't read file header! Unknow file format or file not found. (for unicode file names please activate the Unicode PlugIn in Propertis->Languages.

Pokazuje mi się w IrfanView gdy chce otworzyć plik. Pocztę mam na home.pl a klient pocztowy to Outloock 2010


(Copycona) #4
  1. Hm. Wysłałem testową wiadomość Twoim kodem, Mozilla Thunderbird, jak i Gmail interface poprawnie odczytały załącznik, a po jego zapisaniu suma kontrolna zgadzała się z oryginałem. Plik który wysyłasz jest poprawny? Ja testowo wysyłałem plik, który już miałem na serwerze, a nie z formularza - może tam masz jakiś błąd w obsłudze otrzymanych danych (pliku)?

  2. MIME Content-type pliku sprawdzić przy użyciu funkcji http://php.net/manual/pl/function.mime-content-type.php

    $fileatt_type = "image/jpg"; // typ zalacznika [/code]

Nie ma czegoś takiego. http://www.w3schools.com/media/media_mimeref.asp Jak już image/jpeg

3.

[code=php]      "MIME-Versio: 1.0r\n"."Content-type: text/html; charset=UTF-8\r\n" .

Ta pierwsza część to jakoś z literówką masz, zmień na MIME-Version: 1.0\r\n. Deklarujesz kodowanie znaków w treści wiadomości jako UTF-8, jeżeli taki też stosujesz na swojej stronie nie powinno być problemów z nimi. Jeżeli nie - zmień to.


(Aglasek) #5

a więc w $_FILES jest tylko nazwa pliku a nie pełna ścieżka, więc najpierw zrobiłem upload na serwer i to działa.

Jeśli chodzi o kodowanie to nadal nic mimo tego, że mam wszędzie utf-8. Jeśli chodzi o format pliku to wiem że można wpisywać różne ale jak zrobić aby można było wybrać wszystkie formaty?