Autor Zpráva
mirek36
Profil
zdravím,
mám problém s formulářem na odesílání e-mailů. Na ic.cz běží bezproblému, ale bohužel na php5.cz a na mém placeném hostingu mi furt hlásí e-mail se nepodařilo odeslat. Nevíte kde by mohl být problém?

zde je nezkrácený kod, který chci osekat na mailový formulář (i ten funguje jen na ic.cz)

předem díky

<form action="druhy.php" method="post">

<p align="left"><font face="Arial" size="2"><font color="white">

<br><br><br>
Jmeno:<br>  <input name="jmeno"><br>
Mail příjemce:<br> <input type="text" name="prijemce"><br>
Váš mail:     <br> <input type="text" name="mail_odesilatele"><br>
Předmět:       <br><input type="text" name="predmet"><br>
Zpráva:        <br> <textarea type="text" name="zprava" ROWS="30" COLS="150"></textarea><br>
<input type=submit value="Odeslat">
</form>
<body bgcolor="black">



a odesílací skript

<?php

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);
}

function cs_mail ($to, $predmet, $zprava, $head = "")
       {  $predmet = "=?utf-8?B?".base64_encode(autoUTF ($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 (autoUTF ($zprava));
          return mail ($to, $predmet, $zprava, $head); }


$jmeno = empty($_POST['jmeno']) ? '' : '=?utf-8?B?' . base64_encode(autoUTF($_POST['jmeno'])) . '?= ';

$a = $_POST['zprava'];
  if (cs_mail($prijemce, $predmet, $zprava, "From: " . $jmeno . '<' . $mail_odesilatele . ">\n"))
    echo "Mail byl odeslán";
  else
    echo "Mail se nepodařilo odeslat";
?>
TomasJ
Profil
Zprávu načítáš do proměnné $a ale posíláš proměnnou $zprava.
$a = $_POST['zprava'];
if(cs_mail($prijemce, $predmet, $zprava, "From: " . $jmeno . '<' . $mail_odesilatele . ">\n"))
{
  echo "Mail byl odeslán";
}
else
{
  echo "Mail se nepodařilo odeslat";
}

Na IC.cz to šlo, protože tam máš nejspíš zapnuté register_globals.
EDIT: A jak tak koukám, máš tam jakési chyby. Koukni na register_globals. Pak uděláš jen
$predmet = $_POST['predmet'];
a tak dále...
mirek36
Profil
díky moc pomohlo to, ještě jeden dotaz, dá se nějak zakombinovat ten script do stránky, aby se mi při odeslání objevila pouze hláška ve stránce a neotvíralo se prázné okno s textem, že mai byl odeslán?
panther
Profil
mirek36:
ano, dá. Buď dej scipt do stránky s formulářem, nebo si nastuduj ten text nevypisuj, ale ukládej - do cookie nebo sessiony a ve stránce s formulářem vypisuj, není-li zvolená proměnná prázdná.
mirek36
Profil
asi sem zapoměl napsat, že stránky jsou ve WordPressu a ten mi bohužel nedovolí do stránky vkládat PHP scripty. Jediné co mě napadá je odeslat mail přes skript a přesměrovat zpátky na stránku kde se mi objeví zda byl nebo nebyl odeslán ten mail. Zdá se mi to celkem složité, kdyby si mi hodil na ten princip s cookie nebo sessiony nějakej link ať se můžu kouknout jak se to tvoří, byl bych ti moc věděčný.
mirek36
Profil
dobrý vyřešeno místo scriptu tam dám plugin

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0