Autor Zpráva
harvav01
Profil
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
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
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
nevím, ale použil bych spíše nějaké hotové řešení typu phpmailer, tam tyhle věci běžně fungují
harvav01
Profil
Jenze ja to potrebuju udelat podle sebe :-(

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: