Autor Zpráva
Pavel Dumbrovský
Profil
Dobrý den,
mám problém se skriptem pro odesílání mailu s pdf přílohou. Na seznamu všechno ok, ale na gmail to přijde bez textu a s jakousi přílohou noname - v té se nachází ten text, ale příloha pdf nikde.
Tady je kód:
function cs_mail ($to, $predmet, $zprava, $name, $mail){

		$semi_rand = md5(time()); 
		$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

       global $cf;
		global $lang;  
	   $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?=";
	   $name = "=?utf-8?B?".base64_encode(autoUTF ($name))."?=";
	   $head = "From: \"".$name."\" <".$mail.">\n";
          $head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: multipart/mixed; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
          $zprava = chunk_split(base64_encode (autoUTF ($zprava)));
		  
		  $zprava .= "\nThis is a multi-part message in MIME format.\n\n" . 
                "--{$mime_boundary}\n" . 
                "Content-Type:text/plain; charset=\"utf-8\"\n" . 
                "Content-Transfer-Encoding: base64\n\n" . 
			$zprava . "\n\n"; 
		  
			/********************************************** Příloha ********************************************/

				global $variabil;
				$fileatt = "".$variabil.".pdf"; // Cesta k souboru                 
				$fileatt_type = "application/pdf"; // Typ souboru				
				$fileatt_name = "".$variabil.".pdf"; // Název souboru připojeného k e-mailu v příloze

				$file = fopen($fileatt,'rb');
				$data = fread($file,filesize($fileatt));
				fclose($file);

				$data = chunk_split(base64_encode($data)); 

				$zprava .= "--{$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"; 
				unset($data);
				unset($file);
				unset($fileatt);
				unset($fileatt_type);
				unset($fileatt_name);


Když změním první Content-Type na text/plain , na gmailu se sice zobrazí text (příloha furt nikde), ale na seznam to dojde bez přílohy. Nemá někdo zkušenost, čím to může být?

Díky.
Tori
Profil
A čím to posíláte, PHPMailer? Doplňte, prosím, ještě zbytek kódu.
Pavel Dumbrovský
Profil
Ne, toto je téměř kompletní funkce pro odeslání mailu s přílohou, ještě je tedy na konci té funkce
		  
          $stav = mail ($to, $predmet, $zprava, $head);
          return $stav ?  TRUE : FALSE;  }


:) Chyba musí být někde v deklaraci té hlavičky. Nebo ne chyba, ale něco co se nelíbí gmailu...
Pavel Dumbrovský
Profil
Ještě tedy pro úplnost doplním funkci která se odsud volá:
function autoUTF($s)
{
    // detect UTF-8
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
        return $s;
    // detect WINDOWS-1250
    if (preg_match('#[\x7F-\x9F\xBC]#', $s))
        return iconv('WINDOWS-1250', 'UTF-8', $s);
    // assume ISO-8859-2
    return iconv('ISO-8859-2', 'UTF-8', $s);
}


Ale toto je skript stažený odsud z diskuze z FAQ, jen doplněný o tu přílohu..
Vždy mi to v pohodě jelo, na seznam i s tou přílouhou.
Davex
Profil
V hlavičce by mělo být

$head .= "Content-Type: multipart/mixed;
  boundary=\"{$mime_boundary}\"\n";
Pavel Dumbrovský
Profil
Davex:
boundary=\"{$mime_boundary}\"\n";

Jste machr!
Já tušil, že to bude prkotina. :) Mockrát děkuji, jak se Vám můžu odvděčit? Mohl bych Vám třeba otevřít zavařovačky, s kterými jste nepohnul.. :)

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: