| Autor | Zpráva | ||
|---|---|---|---|
| harvav01 Profil |
#1 · Zasláno: 17. 3. 2008, 07:52:16
Můžete mi prosím poradit, kde mám chybu? Nedaří se mi správně odeslat mail s přílohou. Příloha se sice zobrazí, ale jako řetězec znaků a né jako obrázek.
/** * Odeslání formuláře emailem * @param string $telo_zpravy pole s názvy povinných položek formuláře * @return array pole špatně zadaných nebo nevyplněných položek formuláře */ function odeslat ($telo_zpravy) { // vygenerování boundary (hranice), musí to být řetězec, který se nebude // vyskytovat nikde v textu. Dále vytvoříme úvod mailu, v kterém // určujeme, že mail má více částí vzájemně oddělených pomocí boundary $mime_boundary = "==Multipart_Boundary_x{".md5(time())."}x"; // definice hlaviček $hlavicky = empty($_POST[odesilatel]) ? "From: ".$this->mime_header_encode(SUB)." <".WHO."> \r\n" : "From: ".$this->mime_header_encode($_POST[jmeno])." <".$_POST[odesilatel]."> \r\n"; $hlavicky .= "MIME-Version: 1.0 \r\n"; $hlavicky .= "X-Mailer: PHP \r\n"; $hlavicky .= "X-Priority: 1 \r\n"; $hlavicky .= empty($_POST[odesilatel]) ? "Return-Path: ".WHO." \r\n" : "Return-Path: $_POST[odesilatel] \r\n"; /* Když máme nějakou přílohu, naplníme objekt daty z formuláře (ta jsou obsažena v poli $_FILES) */ if($this->dir_and_files_mail->setUploadData($_FILES)): /** nastavení, kam se mi uploadované soubory budou ukládat. FU_IMP - způsob vytvoření souboru z názvu souboru zadaného ve formuláři - cestu k adresáři zadáváme bez koncového lomítka */ if($this->dir_and_files_mail->setTargetPath(TMP_MAIL, null, "FU_IMP")): // uložíme si do pomocné proměnné informace o příloze $attach = $this->dir_and_files_mail->getUploadContent (); // přesunutí souboru if($this->dir_and_files_mail->upload()): $telo_zpravy .= "\nThis is a multi-part message in MIME format. \n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"utf-8\" \n" . "Content-Transfer-Encoding: 8bit \n\n" . $telo_zpravy . " \n\n"; // máme-li přílohu, posíláme jak text, tak jiný typ (přílohu) => mixed $hlavicky .= "Content-Type: multipart/mixed; \r\n"; // dáme do hlavičky definici oddělovače $hlavicky .= " boundary=\"{$mime_boundary}\""; // načteme přílohu foreach ($attach as $uploadDataArr ){ if (file_exists(TMP_MAIL . $uploadDataArr['name'])): // oddělíme hlavičky $telo_zpravy .= "--{$mime_boundary} \n"; // řekneme, co posíláme $telo_zpravy .= "Content-Type: ".$uploadDataArr['type']."; \r\n"; // a pod jakým jménem $telo_zpravy .= " name=\"".$uploadDataArr['name']."\" \r\n"; // soubor zakódujeme, aby ho vůbec bylo možné poslat. Musíme ale říct, jaké kódování používáme. $telo_zpravy .= "Content-Transfer-Encoding: base64 \r\n"; // posíláme jako přílohu, tedy attachment $telo_zpravy .= "Content-Disposition: attachment; \r\n"; // a pod jakým jménem :) $telo_zpravy .= " filename=\"".$uploadDataArr['name']."\" \r\n\r\n"; // před vložením souboru je NAPROSTO NUTNÉ dodržet dvě odřádkování // vložíme samotný soubor, již zakódovaný (file_get_contents je mnohem lepší než fread, fopen a podobný srandy) $telo_zpravy .= chunk_split(base64_encode(file_get_contents(TMP_MAIL . $uploadDataArr['name'])))." \r\n\r\n"; //$telo_zpravy .= $data." \r\n\r\n"; // odstraníme soubor z tmp adresáře unlink (TMP_MAIL . $uploadDataArr['name']); // nakonec oddělíme $telo_zpravy .= "--{$mime_boundary}-- \n"; endif; } else: // když se něco nepovede, tak si nechám vypsat chyby echo $dir_and_files->errorDesc(); endif; else: // když se něco nepovede, tak si nechám vypsat chyby echo $this->dir_and_files_mail->errorDesc(); endif; else: // pokud nemáme přílohu, posíláme jen zprávu $hlavicky .= "Content-Type: text/html; charset=utf-8 \r\n"; $hlavicky .= "Content-Transfer-Encoding: 8bit \r\n"; $hlavicky .= "Content-Type: multipart/alternative;\r\n"; endif; // samotné odeslání if (empty($_POST[odesilatel])): $ll_retval = mail($_POST[prijemce], $this->mime_header_encode(SUB), $telo_zpravy, $hlavicky); else: $ll_retval = mail(WHO, $this->mime_header_encode(SUB), $telo_zpravy, $hlavicky); endif; if (!$ll_retval): die("<p>Zprávu nelze odeslat. Klikněte zpět a zkuste to znovu.</p>\n\n"); endif; return ($ll_retval); } // konec funkce |
||
| harvav01 Profil |
#2 · Zasláno: 17. 3. 2008, 14:28:46
Opravdnu nikdo neví? Mám zřejmě problém se zakodováním té přílohy do base64 a pak se mi zobrazí jen změť znaků nepřkódovaných emaliovým klientem zpět na obrázek :-(. Možná mám špatně zapsané hlavičky nebo ještě něco :-(.
|
||
| harvav01 Profil |
#3 · Zasláno: 18. 3. 2008, 10:28:26
Zjistil jsem, že se mi příloha korektně zobrazí pouze v Outlooku nebo v Outlookexpresu :-(. V internetových mailech ne :-(. Neví nikdo v čem by mohl být problém?
|
||
| nightfish Profil |
#4 · Zasláno: 18. 3. 2008, 11:03:00
nevím, ale použil bych spíše nějaké hotové řešení typu phpmailer, tam tyhle věci běžně fungují
|
||
| harvav01 Profil |
#5 · Zasláno: 20. 3. 2008, 16:39:14
Jenze ja to potrebuju udelat podle sebe :-(
|
||
|
Časová prodleva: 18 let
|
|||
0