Autor Zpráva
virgo86
Profil
Dvě věci se kterýmy jsem se setkal při programovaní posilaní přílohy.
1) kodovaní přichoziho e-mailu. Jaký typ kodovaní mám použit místo hačků a čárek se mi zobrazují otazníky?
2) jak přiložit k e-mailu soubor? pouze typu např. jpg a dwg.
Co jsem zde vyčetl bylo pouze to že velikost souboru se nastaví na serveru je to tak že?

jinak je to jenom hrubej skript bez ochrany. a ověření platnosti zadaných dat.

formulář
<form method=post action="nekam.php?language=<?php echo $language?>">
 <table bgcolor=#cccccc>
   <tr>
     <td>Email:</td>
     <td><input type=text name=email size=30 maxlength=100></td></tr>
   <tr>
     <td>Firma (přijmení):<br /></td>
     <td valign=top><input type=text name=firma
                     size=16 maxlength=16></td></tr>
  
    <tr>
     <td>soubor:<br /></td>
     <td valign=top> <input type="file" name="soubor" /></td></tr>
  
   <tr>
     <td colspan=2 align=center>
     <input type=submit value="Odeslat poptávku"></td></tr>
 </table></form>


soubor pro zaslaní mailu
<?php
require_once('fce.php');
titulek($language,$page);
$mail = "mail@seznam.cz";
$predmet = "zpráva z web";
$zprava = "Firma ".$firma."\r\n kontakt: ".$email;
$kon = cs_mail ($mail, $predmet, $zprava, "From: vas@web.cz\n");

if ($kon)
  echo "E-mail byl úspěšně odeslán.<br>";
 else
  echo "E-mail se bohužel nepodařilo odeslat.<br>";



function cs_mail ($to, $predmet, $zprava, $head = "")
       {  $predmet = "=?utf-8?B?".base64_encode ($predmet)."?=";
          $head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: text/plain; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
          $zprava = base64_encode  ($zprava);
          return mail ($to, $predmet, $zprava, $head); }



konec();
?>


Script mi odešle předmět, zprávu soubor nevím jak přidat. a kodovaní asi taky špatně že. předem díky za rychlost
Keeehi
Profil
Ve FAQ je na konci toto: "Pro složitější věci (např. přílohy) doporučuji PHPMailer nebo Nette mail."
virgo86
Profil
Keeehi:
tak aspoň to kodovaní když už ne příloha!
virgo86
Profil
Keeehi:
nějaké info o phpmailer? co jsem koukal teď na internetu musím si to stahnout do PC. Ale nevím zda server na kterém mám webhosting použivá phpmailer...to je tak složitý přiložit soubor k funkci cs_mail() ?
Keeehi
Profil
virgo86:
Na servru by jsi phpmailer rozchodit měl, protože je to normální script (třída), který vložíš do daného souboru pomocí include jako jakýkoliv jiný script. Na webhostingu to tedy nezáleží.

Třeba zde je, jak poslat email i s přílohou pomocí phpmaileru.
Davex
Profil
virgo86:
1) kodovaní přichoziho e-mailu. Jaký typ kodovaní mám použit místo hačků a čárek se mi zobrazují otazníky?
Je stránka s formulářem a odesílací skript uložen v kódování utf-8? Původní funkce z PHP FAQ používá ještě funkci autoUTF(), která tady chybí.
virgo86
Profil
Keeehi:
Za odkaz díky jdu to prostudovat, snad se mi večer podaří odeslat přílohu.
virgo86
Profil
Davex:
Je stránka s formulářem a odesílací skript uložen v kódování utf-8?
jestli máš namysli meta tag
<meta http-equiv="content-type" content="text/html; charset=windows-1250">                   

tak ne. jsem like takže pokud pišu totalní kravinu sry.

na funkci autoUTF() mrknu dík
Keeehi
Profil
virgo86:
Davex měl na mysli , zda je soubor uložen jako UTF.
virgo86
Profil
je mi to trapné ale jak to poznám? programuji v pspadu.
Keeehi
Profil
Záložka formát > UTF-8 (tím to nastavíte)
V jakém kódování je soubor právě teď poznáte dole z "stavového" řádku. (Je tam napsáno Kódování: xxxxx)
Davex
Profil
V PsPadu se kódování nastavuje v nabídce Formát » UTF-8.
virgo86
Profil
ok fajn takže nejlepší bude nastavit utf8 a v tom meta tagu taky mám nastavit to kodovaní utf8?
Keeehi
Profil
Ano, soubor uložit jako utf. metatag by se mohl taky hodit (nevím, kam se ho pokoušíte dát).
virgo86
Profil
Keeehi:
musel jsem i meta tag předělat jakmile jsem uložil soubory na kodovaní utf8 uplně se mi to rozhodilo. po nastavení meta tagu vše ok.
ještě se vratím k phpmaileru. Neporozuměl jsem s článku kde mám soubor class.phpmailer.php uložit?
ja ho vložil do adresaře kde mám soubory ze strankamam, ale myslím že to je špatně. ukaže mi to tuto chybu.

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\apache\htdocs\nol\class.phpmailer.php on line 53

Fatal error: Cannot instantiate non-existent class: phpmailer in c:\apache\htdocs\nol\popt.php on line 4
Keeehi
Profil
virgo86:
Což o to, vy jste ho vložil dobře, problém je, že je v souboru class.phpmailer.php syntaktická chyba. Odkud jste to stahoval? Pokud máte nainstalovanou 4. verzi PHP, tak to zkuste tohoto linku, pokud 5. verzi tak z tohoto.
virgo86
Profil
Keeehi:
díky další problém vyřešen. jen ještě snad už poslední otazku na toto téma. smtp server jsem nastavil protože znám sveho poskytovatele internetu takže na mém virtulním serveru v pohodě. ale jak poznám jaký smtp server bude mít uživatel který mi bude chtít poslat e-mail z mojich stránek.

V podstatě mi jde o to aby uživatel stránek mi poslal zprávu na můj mail i třeba s připonou.
virgo86
Profil
a kodovaní v příchozím mailu v pořádku diky
Keeehi
Profil
virgo86:
On žádné smtp nastavovat nebude. To si nastavíte vy v tom scriptu a ten script bude poílat emaily přes to vaše nastavé smatp. Jemu je jedno, kdo odeslal ten formulář.
virgo86
Profil
Keeehi: to že nemude nastavovat smtp server je mi jasné. ale nevěděl jsem jaky mám zadat do scritu server, ale napadlo mě že když obejdu funkci $mail->IsSMTP(); asi tam nemusím psát smtp server vůbec. sice mi to nebude fungovat na pc ale na serveru na internetu ano. vyzkouším uvidím
virgo86
Profil
funguje prostě tam smtp nezadam vubec. teď jdu řešit přílohy.
virgo86
Profil
Mám pravdu když chci využít formulář pro odeslaní e-mailu s přílohou že nejprve musím ten soubor nahrat na server a pak odeslat?
xmark
Profil
virgo86:
Mám pravdu
Máš.
virgo86
Profil
Mám script téměř hotový ale potřebuji jestli mi to odsouhlasite přece množina je jenom chytřejší.

Formulář:
<form method=post enctype="multipart/form-data" action="poptavka.php?language=<?php echo $language?>">
 <table bgcolor=#FF9900>
   <tr>
     <td>Email:</td>
     <td><input type=text name=email size=30 maxlength=100></td></tr>
   <tr>
     <td>Firma (přijmení):<br /></td>
     <td valign=top><input type=text name=firma
                     size=16 maxlength=16></td></tr>
  <tr>
     <td>telefon:</td>
     <td><input type=text name=telefon size=30 maxlength=100></td></tr>
   <tr>
    <tr>
     <td>výkres:<br /></td>
     <td valign=top><input type="hidden" name="MAX_FILE_SIZE" value="10000000"> 
     <input type="file" name="userfile"></td></tr>
  
   <tr>
     <td colspan=2 align=center>
     <input type=submit value="Odeslat poptávku"></td></tr>
 </table></form>


Script pro načtení souboru na server a posléze odeslán na mail a ze serveru smazan:
<?php
/* zde využivám phpmailer který je třeba stahnout z internetu podle verze php. 
poté soubory uložím do složky ke strankam viz. návod http://hrazdil.info/blog/202-e-maily-s-prilohou-v-php/comment-page-1#comment-1098
*/
require_once('fce.php');
titulek($language,$page);
require "./class.phpmailer.php";
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$obsah = $_POST['obsah'];

if ($userfile==NULL)
{
echo '<h1>nevložil jste žadný soubor</h1><META HTTP-EQUIV="Refresh" CONTENT="5;URL=index.php">';
exit;
}
//nacteni souboru na server
  $userfile = $HTTP_POST_FILES['userfile']['tmp_name'];
$userfile_name = $HTTP_POST_FILES['userfile']['name'];
$userfile_size = $HTTP_POST_FILES['userfile']['size'];
  $userfile_type = $HTTP_POST_FILES['userfile']['type'];
  $userfile_error = $HTTP_POST_FILES['userfile']['error'];
if ($userfile_error > 0)
  {
    echo '<h2INFO PRO ADMINA: ';
    switch ($userfile_error)
    {
      case 1:  echo 'Soubor přesáhl upload_max_filesize</h2>';  break;
      case 2:  echo 'Soubor přesáhl max. velikost</h2>';  break;
      case 3:  echo 'Soubor je nahrán jen částečně</h2>';  break;
      case 4:  echo 'Soubor se nenahrál</h2>';  break;
    }
    exit;
  }
  $upfile = "/server1/webs/net.cz/ftp/".$userfile_name;
  if (is_uploaded_file($userfile)) 
  {
     if (!move_uploaded_file($userfile, $upfile))
     {
        echo '<h2>INFO PRO ADMINA: Soubor nelze přemístit do cílového adresáře</h2>';
        exit;
     }
  } 
  else 
  {
    echo '<h1>INFO PRO ADMINA:</h1> <p><h2>Možný útok. </h2>Soubor: '.$userfile_name;
    exit;
  }
  echo '<h1>INFO PRO ADMINA:</h1><p><h2> Soubor byl úspěšně nahrán</h2></p><br /><br />'; 
 
  // puvodni script z http://hrazdil.info/blog/202-e-maily-s-prilohou-v-php
  // smtp server zadam jen pokud potřebuji testovat na virtualním serveru v pc
  // jinak na internetu běží bez toho
$mail = new PHPMailer();
 // $mail->IsSMTP();  // k odeslání e-mailu použijeme SMTP server
//  $mail->Host = "smtp.sloane.cz";  // zadáme adresu SMTP serveru pro firmu AMADA VESO
// $mail->SMTPAuth = false;               // nastavíme true v případě, že server vyžaduje SMTP autentizaci
  $mail->From = $email;   // adresa odesílatele skriptu
  $mail->FromName = $firma; // jméno odesílatele skriptu (zobrazí se vedle adresy odesílatele)

  $mail->AddAddress("petr@seznam.cz", "Petr");  // jméno příjemce

  $mail->Subject = "Pop z net";    // nastavíme předmět e-mailu

  
  // nastavíme textové tělo e-mailu
  $mail->Body = "Firma ".$firma." ti posilá nasledujicí přilohu:\n telefon: ".$telefon."\n e-mail: ".$email."\n";
  $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

  // vložíme soubor
  $mail->AddAttachment("/server1/webs/net.cz/ftp/".$userfile_name);
  // vložíme obrázek, na který jsme se odkázali výše
  // $mail->AddEmbeddedImage("./nadpis2.png", "cez", "nadpis2.png", "base64", "image-png");

  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. '.$userfile_name;
  }
 unlink("/server1/webs/net.cz/ftp/".$userfile_name); //smazaní souboru ze serveru
konec();


Hlavně mi pověste jestli je to dobré řešení?
Potom co se týče bezpečnosti proti utokům hackru.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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