Autor Zpráva
drak
Profil *
Dobrý večer,
řeším problém odesílání mailu s přílohou (popř. přílohami) a CZ znaky. Script který mám odešle mail s přílohou ale někde zapomene obsah mailu, reps. on přijde, ale nezobrazuje se :(

Řešení:
$attachment_name = 'php.zip'; 
$fp = FOpen ($attachment_name, 'r'); 
$contents = FRead ($fp, FileSize($attachment_name)); 
$contents = Chunk_Split(Base64_Encode($contents)); 
FClose ($fp); 

$address = 'cvrcek.jiri@gmail.com'; 
$subject = 'Email s prilohou'; 

$headers = "From:  TestMail <test@ccomp.eu>\n"; 
$headers .= "Reply-To: <test@ccomp.eu>\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-Type: multipart/mixed; boundary=\"" 
           ."----=MIME_BOUNDRY_main_message\"\n"; 
$headers .= "X-Sender: TestMail <test@ccomp.eu>\n"; 
//$headers .= "X-Mailer: PHP\n"; 
//$headers .= "X-Priority: 3\n"; //Priorita emailu 1 = Urgentni, 3 = Normalni 
$headers .= "Return-Path: <test@ccomp.eu>\n"; 
$headers .= "This is a multi-part message in MIME format.\n"; 
$headers .= "------=MIME_BOUNDRY_main_message \n"; 
$headers .= "Content-Type: multipart/alternative; boundary=\"" 
           ."----=MIME_BOUNDRY_message_parts\"\n"; 

$message = "\n------=MIME_BOUNDRY_message_parts\n"; 
$message .= "Content-Type: text/plain; charset=\"windows-1250\"\n"; 
$message .= "Content-Transfer-Encoding: quoted-printable\n"; 
$message .= "\n"; 
$message .= "\n"; 
$message .= "\n"; 
$message .= "\n------=MIME_BOUNDRY_message_parts--\n"; 
$message .= "SEM MUZETE ZADAT TEXT EMAILU \n"; 
$message .= "------=MIME_BOUNDRY_main_message\n"; 
$message .= "Content-Type: application/octet-stream;\n\tname=\"" . $attachment_name . "\"\n"; 
$message .= "Content-Transfer-Encoding: base64\n"; 
$message .= "Content-Disposition: attachment;\n\tfilename=\"" . $attachment_name . "\"\n\n"; 
$message .= $contents; //Zakodovana priloha 
$message .= "\n"; 
$message .= "------=MIME_BOUNDRY_main_message--\n"; 

//ODESLANI EMAILU 
if (mail($address, $subject, $message, $headers)) 
{ 
  print 'Email byl úspěšně odeslán.'; 
} 
else 
{ 
  print 'Došlo k chybě!'; 
}



Vyřešeno ;)
Alphard
Profil
drak:
Vyřešeno ;)
Občas se někdo ptá na stejný problém, bylo by užitečné, kdybyste sem napsal, v čem byl problém (ideálně uvedl funkční řešení).
drak
Profil *
Funkčnější řešením bylo stažení PHPMailer v5.1 a pročtení jeho dokumentace. :)
Pomocí funkce mail() a napsáním vlastních hlaviček buď nechodila příloha, nebo obsah zprávy, či to padalo do spamu a nebo to nedorazilo vůbec, ale uspokojující výsledek nikdy.


Řešení:
  require "./phpmailer/class.phpmailer.php";
  $mail = new PHPMailer();
  $mail->IsSMTP();  // k odeslání e-mailu použijeme SMTP server
  $mail->Host = "xxx.xxx.xx";  // zadáme adresu SMTP serveru
  $mail->SMTPAuth = false;               // nastavíme true v případě, že server vyžaduje SMTP autentizaci
  $mail->Username = "jmenouzivatele";   // uživatelské jméno pro SMTP autentizaci
  $mail->Password = "heslo";            // heslo pro SMTP autentizaci
  $mail->From = $_POST['od'];   // adresa odesílatele skriptu
  $mail->FromName = "Mailer Test"; // jméno odesílatele skriptu (zobrazí se vedle adresy odesílatele)

  $mail->AddAddress($_POST['komu']);  // přidáme příjemce

  $mail->Subject = $_POST['predmet'];    // nastavíme předmět e-mailu
  $mail->Body = $_POST['zprava'];
  $mail->WordWrap = 50;   // je vhodné taky nastavit zalomení (po 50 znacích)
  $mail->CharSet = "utf-8";   // nastavíme kódování, ve kterém odesíláme e-mail
  
  $mail->AddAttachment("./php.zip", "php-example.zip");

  if(!$mail->Send()) {  // odešleme e-mail
     echo 'Došlo k chybě při odeslání e-mailu.';
     echo 'Chybová hláška: ' . $mail->ErrorInfo;
  }
  else
  {
     echo 'E-mail byl v pořádku odeslán.';
  }
  

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: