[PHP] mail(); - problem z zalacznikami

0

co robie zle ????
mam:

  $boundary = md5(uniqid(time(),1))."_xmail";
  $email = "[email protected]";
  
  $subject = "Akualizacja daych";
  $from = $_POST['emailosoby'];

  $headers = "From: Serwis www <$from>\r\n";
  $headers.= "MIME-Version: 1.0\n";
  $headers.= "Content-Type: multipart/mixed;\n";
  $headers.= "Content-transfer-encoding: 7BIT\n";
  $headers.= "boundary=\"$boundary\"\n";

  $message = "\nThis is a multi-part message in MIME format.\n\n";
  $message.= "--$boundary\n";
  
  $message.= "Content-Type: text/html; ";
  $message.= "charset=\"iso-8859-2\"\n";
  $message.= "Content-Transfer-Encoding: 7BIT\n";
  
  $message.= "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">
              <tr>
              [...]
              </tr>
              </table>\n
             ";
  $message.= "--$boundary\n";
  
  if(count($_FILES)){
     if(!empty($_FILES['prezentacja'])){
       $message .= "Content-Type: ".$_FILES['prezentacja']['type'].";
                            name=\"".$_FILES['prezentacja']['name']."\"\n";
       $message .= "Content-Transfer-Encoding: base64\n";
       $message .= "Content-Disposition: attachment; filename=\"".$_FILES['prezentacja']['name']."\"\n\n";
       $message .= "".chunk_split(base64_encode(file_get_contents($_FILES['prezentacja']['tmp_name'])))."\n";
       $message .= "--$boundary\n";
     }
     if(!empty($_FILES['herb'])){
       $message .= "Content-Type: ".$_FILES['herb']['type'].";  
                            name=\"".$_FILES['herb']['name']."\"\n";
       $message .= "Content-Transfer-Encoding: base64\n";
       $message .= "Content-Disposition: attachment; filename=\"".$_FILES['herb']['name']."\"\n\n";
       $message .= "".chunk_split(base64_encode(file_get_contents($_FILES['herb']['tmp_name'])))."\n";
       $message .= "--$boundary--";
     }
  }

email sie wysyla ale nic w nim nie ma :(

0

http://www.avocado.risp.pl/files/texts/od0dogk/html/0_3.html dział "Kto pyta, nie błądzi (?)" - Sugeruję przestudiować.

0

dzieki za pomoc :/

0

Pewnie cos sie kopie przy dostepie do pliku zalacznika. Zobacz np. czy z

$_FILES['herb']['tmp_name']

jest wszystko ok - czemu odwolujesz sie do nazwy tymczasowej? Moze nie masz dostepu do /tmp? Jest juz pozno, a ja po zoladkowej gorzkiej ;), wiec prawdopodobne jest ze bredze, ale na pierwszy rzut oka to w ta strone debuggujac bym podazal.

0

Odowolywanie sie do nazwy tymczasowej nie ma nic wspolnego z dzialaniem. Powiem wiecej, ze nawwrt lepiej jest to stosowac bo plik bedzie tylko na czas dzialania skryptu a my nie musimy martwic sie o ewentualne jego usuwanie.

0

z $_FILES i tmp_name jest OK, mail sie wysyla ale program pocztowy nie potrafi go poprawnie wyswitlic.
zrodlo maila wyglada mniej wiecej tak:

[...]
X-Mailer: PHP 
MIME-Version: 1.0
Content-Type: multipart/mixed;
Content-transfer-encoding: 7BIT boundary="657137d37d6ce85220a2262724023d9f_xmail"

--657137d37d6ce85220a2262724023d9f_xmail
Content-Type: text/plain; charset="iso-8859-2"
tresc wiadomosci.... [...]


--657137d37d6ce85220a2262724023d9f_xmail
Content-Type: text/plain;  name="instalacja.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="instalacja.txt"

IA0KUHJvY2VkdXJhIEluc3RhbGFjeWpuYSBITXNhbGVzIHYuMy4xLjBmIG1heCBkbGEgd3d3Lmtv
bGthcm9sbmljemUucGw6DQogDQogDQoxLiBaYWluc3RhbG93YeYgYXBsaWthY2plIEhNc2FsZXMg
di4zLjAuOGYgbWF4IHogd3N6eXRraW1pIGtvbXBvbmVudGFtaSB1cnVjaGFtaWFqYWMgICAgIHBs
[...]


--657137d37d6ce85220a2262724023d9f_xmail
Content-Type: image/x-icon;  name="HMsales.ico"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="HMsales.ico"

AAABAAEAICD/AAAAAACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAM5n/AIrM/wA/n/8AG1KIAB9cmQAlcLsAnt3/AP///wAJCQkABgYGAB0dHQD39/cA
mpqaANjY2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[...]


--657137d37d6ce85220a2262724023d9f_xmail--
-------

no i nie wiem skad mi sie biorą te "-------" na koncu ??
i co jest zle (hmm w MIME ?) ze program pocztowy nie potrafi poprawnie odczytac tego maile... :/ ??

0

Ostatnio robilem taki serwis czlownkowski gdzie trzeba bylo wyslac maila z zalacznikiem. dziala idealnie. Pokaze czesc kodu, ktora za to odpowiada:

if ($append)
      {
        srand((double)microtime()*1000000);
        $znacznik = '___'.md5(uniqid(rand())).'==';

        $naglowki .= 'Content-Type: multipart/mixed;'."\n";
        $naglowki .= "\t".'boundary="'.$znacznik.'"';

        $tresc  = '--'.$znacznik."\n";
        $tresc .= 'Content-Type: text/html; charset=\"iso-8859-2"'."\n";
        $tresc .= 'Content-Transfer-Encoding: 8bit'."\n";
        $tresc .= "\n".$wiadomosc."\n";

        foreach ($tab as $plik)
        {
          $tresc .= '--'.$znacznik."\n";
          $tresc .= 'Content-Type: '.get_mime_type($plik, $op)."\n";
          $tresc .= 'Content-Disposition: attachment;'."\n";
          $tresc .= ' filename="'.$plik.'"'."\n";
          $tresc .= 'Content-Transfer-Encoding: base64'."\n\n";
          $f = fopen('./file/'.$plik,$op);
          $dane = fread($f,filesize('./file/'.$plik));
          fclose($f);
          $tresc .= chunk_split(base64_encode($dane));
        }
        $tresc .= '--'.$znacznik."--\n";
      }
      else
      {
        $naglowki .= 'Content-Type: text/html; charset=iso-8859-2'."\n";
        $tresc = "\n".$wiadomosc."\n";
      }
      
      if (!mail(_MAIL_TO_, $subject, $tresc, $naglowki))
        echo '<font size=2 color=red>Problem z wysłanie wiadomości!!!</font>';

Wyjasnienia:
$append - mzienna , ktora informuje czy calaczniki sa.
$tab - tablica z nazwami plikow, ktore istnieja fizycznie
MAIL_TO - stala do nadawcy
get_mime_type() - funkcja przypisujaca odpowiednie MIME w zaleznosci od typu pliku. Liste MIME mozna pobrac z:
http://www.webmaster-toolkit.com/mime-types.shtml

0

dzieki pomoc sie przydala, a blad byl w tym, ze separator (boundary) musi idealnie przylegac do tresci wiadomosci badz tez zalaczniki, nie moze miedzy nimi byc nawet spacji odstepu...

PS
czy ten '' przed "iso-8859-2" jest potrzebny ;)

maniek_2 napisał(a)

[...]
$tresc .= 'Content-Type: text/html; charset="iso-8859-2"'."\n";
[...]

0
ssnake napisał(a)

PS
czy ten '' przed "iso-8859-2" jest potrzebny ;)

Oczywiscie, ze nie. Zapomnialem zmienic gdy zmienialem podwojne apostrofy na pojedyncze :)

0

Myślę, że sprawa jest na tyle przydatna, że fajnie, gdyby komuś się chciało ładnie to opisać, sformatować i wrzucić jako FAQ w PHP :)

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