Autor Zpráva
Jakubfidler
Profil
Ahoj, mám problém s webovou šablonou, držel jsem se instrukcí kdy jsem v souboru sandmail.php změnil adresu a po natáhnutí stránek na server to nic neposílá.
Jde o stránky www.vystavatitanic.cz, kdyby mi s tím někdo píchnul byl bych vděčen, děkuji
xaverista
Profil
Jakubfidler:
Jde o stránky www.vystavatitanic.cz, kdyby mi s tím někdo píchnul byl bych vděčen, děkuji
Obávám se, že pokud neuvidíme script na odesílání emalů, tak nebude nikdo moci pomoct, ale co jsem se díval na šablonu, tak jsem zjistil o kterou se jedná. Máš toto tedy v sendmail.php?

<?php
$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to           = 'email@email.com';//replace with your email

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $message, $headers);

die;


Osobně bych asi na odesílání emailů použil PHPMailer
Davex
Profil
Jakubfidler:
Ta stránka je čistě v HTML a action u formuláře není namířený na vhodný skript, který by odeslání e-mailu mohl zajistit. Nějakou obdobu skriptu mailhandler.php jako to bylo minule.

xaverista:
Máš toto tedy v sendmail.php?
Soubor sendmail.php tam nemá a asi ti tam chybí řádek, který by z $headers udělal řetězec, který očekává funkce mail(). Jinak s tím PHPMailerem je to dobrý tip.
Jakubfidler
Profil
soubor sendmail.php tam je:

<?php
$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to           = 'fidler@jvsgroup.cz';//replace with your email

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $message, $headers);

die;


a tohle je to co je v něm


xaverista: No a každopádně jsem měl zato že to co tam je, tedy sandmail.php, je právě phpmailer
xaverista
Profil
Jakubfidler:
Tento kód mi na mém webhostingu funguje... samozřejmě $_POST si tam musíš dát svoje hodnoty, které předáš z formuláře :-)

<?php
$_POST['name'] = "xaver";
$_POST['email'] = "mujemail@email.com";
$_POST['subject'] = "Testovaci email";
$_POST['message'] = "test";
$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to           = 'xxxxxxxxx@gmail.com';//replace with your email
 
$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

$headers = implode("\r\n", $headers);
 
if(mail($to, $subject, $message, $headers)){
    echo "OK";
} else {
    echo "problem";
}
 
die;

Pro ukázku funkčnosti odeslání emilu na Gmail přikládám obrázek


No a každopádně jsem měl zato že to co tam je, tedy sandmail.php, je právě phpmailer
ne toto phpmailer není
Jakubfidler
Profil
xaverista:
no pořád nic, jde mi z toho hlava kolem. Formulář z hlavního indexu.html:
<form id="main-contact-form" name="contact-form" method="post" action="#">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="text" name="name" class="form-control" placeholder="Jméno" required="required">
                    </div>
                  </div>
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="email" name="email" class="form-control" placeholder="Váš email" required="required">
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <input type="text" name="subject" class="form-control" placeholder="Předmět" required="required">
                </div>
                <div class="form-group">
                  <textarea name="message" id="message" class="form-control" rows="4" placeholder="Napište nám zprávu" required="required"></textarea>
                </div>                        
                <div class="form-group">
                  <button type="submit" class="btn-submit">Odeslat</button>
                </div>
              </form> 

a do sand mail jsem přidal váš fungující kód tedy:
<?php
$_POST['name'] = "Jméno";
$_POST['email'] = "Email";
$_POST['subject'] = "Předmět";
$_POST['message'] = "Napište nám zprávu";
$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to           = 'fidler@jvsgroup.cz';//replace with your email
 
$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
 
$headers = implode("\r\n", $headers);
 
if(mail($to, $subject, $message, $headers)){
    echo "OK";
} else {
    echo "problem";
}
 
die;

a stále mi nic nepřichází
Lonanek
Profil
Dle mého názoru nemá co zpracovat data.
<form id="main-contact-form" name="contact-form" method="post" action="#">

zkuste data zpracovat v souboru sendmail.php
<form id="main-contact-form" name="contact-form" method="post" action="sendmail.php">
xaverista
Profil
Jakubfidler:
Jelikož budete proměnné $_POST předávat formulářem, smaž tyto řádky:
$_POST['name'] = "Jméno";
$_POST['email'] = "Email";
$_POST['subject'] = "Předmět";
$_POST['message'] = "Napište nám zprávu";

toto bylo pouze na zkoušku, jestli se vůbec cosi odešle, když spustíš script sendmail.php (klidně i bez formuláře) Klidně tam teď nechtej ty proměnné, ale zkus si spustit ten script normálně v prohlížeči a zjistit jestli se něco odesílá, pak je smaž, aŤ tam jsou hodnoty předané z formuláře
Jakubfidler
Profil
no tak jsem to vymazal a přišel uplně prázdný mail


xaverista:když tam jsou ty čtyři řádky tak chodí text z těch čtyř řádků ale když je vymažu tak chodí maily úplně prázdné
Lonanek
Profil
Jakubfidler:
když je vymažu tak chodí maily úplně prázdné
A to spouštíte samotný script nebo je to již z formuláře?
Jakubfidler
Profil
Lonanek již z formuláře, přepsal jsem to a nahrál na server a po vyplnění formuláře příjdejiž zmíněný prázdný email
Lonanek
Profil
A jak vypadá celý kód nyní?
Zkoušel jste doplnit "POSTy" přímo do souboru a spustit samotný script? Dle xaverista

Jakubfidler:
tak chodí text z těch čtyř řádků ale když je vymažu tak chodí maily úplně prázdné
Tohle vypadá na chybu ve zpracování proměnných $_POST
Jakubfidler
Profil
tak jsem to dal do notepadu a uložil jako PHP a dal otevřít v chrome a ukazal se pouze text který jsem tam vložil a na mail mi nic nepřišlo
Lonanek
Profil
To nám moc neřekne.
Kde hostujete?
Jakubfidler
Profil
active24


Lonanek:
active24
Lonanek
Profil
Dejte sem ten upravený kód obou souborů, zkontrolujte si upravovaný soubor zda neobsahuje BOM znaky.

Pro úpravu souborů používejte k tomu určené programy, např. NotePad++, PSPad, ...
xaverista
Profil
Jakubfidler:
To nebude hostingem, ale problémem že máte action="sendmail.php" ale když jsem se pokusil přistoupit na adresu http://www.vystavatitanic.cz/sendmail.php tak mi ten script nenašlo, kde máš uložený ten script sendmail.php? V nějaké složce?
Lonanek
Profil
xaverista:
To nebude hostingem,
To je pravda, nechtěl jsem hosting z důvodu jeho možné chyby, ale z důvodu možnosti vidět to co je skutečně a jak na FTP uloženo (pokud by to byl "ten správný" hosting).
Pozdě jsem si všiml, že zde byla uvedena doména a mohl jsem si zkontrolovat směrování DNS.

Předpokládal jsem také, že soubor pro odeslání (sendmail.php) je umístěn ve stejné složce jako soubor formuláře.

EDIT:
Soubor, který zpracovává požadavek se jmenuje sendemail.php (viz zdrojový kód stránky) a je umístěn ve stejném adresáři. Po jeho zavolání vrátí hlášku OK.
Pokud je v souboru sendemail.php opravdu to co je zde uvedeno, pak mne jen zaráží, proč v emailu nastavujte Latin-1, když stránka je v UTF-8?
Jakubfidler
Profil
nastavil jsem UTF-8, ale stále mi přichází jen prázdné emaily
Lonanek
Profil
Jediné co mne napadá, je, že o odeslání se stará nějaký JS script.
Zkuste ještě přejmenovat id formuláře a poznáte co se stane.
Jakubfidler
Profil
id jsem změnil a stále bez změny, pořád přicházejí prázdné emaily
prohledávám ty js a našel jsem pouze toto je to v main.js:
    // Contact form
    var form = $('#main-contact-form');
    form.submit(function(event){
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            url: $(this).attr('action'),
            beforeSend: function(){
                form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success">Thank you for contact us. As early as possible  we will contact you</p>').delay(3000).fadeOut();
        });
    });
Lonanek
Profil
Jakubfidler:
id jsem změnil a stále bez změny
A jak? Jediné co jste změnil je název akce - sendemail1.php. Já pořád vidím stejné id:
 <form id="main-contact-form" name="contact-form" method="post" action="sendemail1.php">
Jakubfidler
Profil
tak email přišel sláva, ale ještě se po odeslání v prohlížeči objeví OK přesně tak jak se objevil ja se testoval ten script
xaverista
Profil
Jakubfidler:
Je to tím, že se formulář přesměruje na script který odesílá emaily a díky té podminky ti ro vypíše zda se objevil nějaký problém nebo ne. Klidně dej na konec scriptu (před die;)
header("location: /");
Který přesměruje uživatele na hlavní stránku. Nebo odesílání můžeš udelat pomocí AJAXU a vypsat hlášku o odeslání nebo chybě vypsat pomocí notifikace. A nebo zakomponovat odesílaci script emailu přímo na stránku odkud se odesílá, timpadem to uživatele hodí pouze ma začátek stránky
juriad
Profil
xaverista:
header musí být před echem, jinak je vysoká šance, že dostane Nejčastější potíže s PHP (FAQ) » Headers already sent…
Jakubfidler
Profil
dobré ráno, takkdyž jsem to dal před echo:

$
.......
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
 
$headers = implode("\r\n", $headers);


 
if(mail($to, $subject, $message, $headers)){
    echo "OK";
} else {
    echo "problem";
}

die

Fatal error: Uncaught Error: Call to undefined function MIME-Version: 1.0 Content-type: text/plain; charset=UTF-8 From: jijijj <jakubfidler@kbkm.cz> Reply-To: <jakubfidler@kbkm.cz> Subject: jjjihih X-Mailer: PHP/7.0.5() in /www/doc/www.vystavatitanic.cz/www/sendemail1.php:19 Stack trace: #0 {main} thrown in /www/doc/www.vystavatitanic.cz/www/sendemail1.php on line 19

a když jsem to dal před die:

$
...............
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
 
$headers = implode("\r\n", $headers);


 
if(mail($to, $subject, $message, $headers)){
    echo "OK";
} else {
    echo "problem";
}

die
ukázolo to:
OK
Fatal error: Uncaught Error: Function name must be a string in /www/doc/www.vystavatitanic.cz/www/sendemail1.php:26 Stack trace: #0 {main} thrown in /www/doc/www.vystavatitanic.cz/www/sendemail1.php on line 26

email vždycky přišel, ale zpět mě to neodkázalo
zkoušel jsem vložit header("location: /"); i přidat znak $header("location: /"); i headers("location: /");
a ukazuje to samé
Davex
Profil
To přesměrování není moc řešení. Podstata problému je v tom, že se formulář má odeslat přes AJAX, ale to se nestane, protože tam dojde ke kritické chybě při inicializaci jiného JavaScriptu (v minifikovaném wow.min.js, což ztěžuje ladění), díky čemuž se vykonávání JavaScriptu zastaví a na ten AJAX vůbec nedojde.

Jakubfidler:
Fatal error: Uncaught Error:
To už jsi rozbil moc dokonale a v tom PHP skriptu něco chybí nebo přebývá. Minimálně závorky a středník za die();

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:

0