Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
3012
Člen
Avatar
3012:6.1.2019 19:28

Dobrý večer, chcel by som vás požiadať o pomoc s php skriptom na odosielanie mailov, skúšal som naprogramovať skript ktorý odošle používatelovy mail v ktorom mu podakuje za regstráciu, no nefunguje my.

Zkusil jsem: Skúšal som toto:

<?php

$hlaska = '';
if ($_POST) // V poli _POST něco je, odeslal se formulář
{
        if (isset($_POST['email']) && $_POST['email'])

        {
                // Sem přijde odeslání emailu
                                $hlavicka = "From: [email protected]";
                                $adresa = "[email protected]";
                                $predmet = 'Nová zpráva z mailformu';
                                $sprava = 'Nová zpráva z mailformu';
                                $uspech = mb_send_mail($adresa, $predmet, $sprava, $hlavicka);
                                if ($uspech)
                                {
                                        $hlaska = 'Email was sent successfully, visit your mailbox.';
                                        }
                                        else
                                                $hlaska = 'Email failed to send. Check the address.';
                                        }
                                        else
                                                $hlaska = 'Formulář není správně vyplněný!';
                                        }


?>

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
sender
</title>
</head>

<body>

<?php
        if ($hlaska)
                echo('<p>' . $hlaska . '</p>');
?>

<form method="POST">


                <tr>
                        email:
                        <input name="email" type="email" text="email" />
                                                <input type="submit" value="Register" />
                </tr>



        </form>
</body>

</html>

taktiež som našiel tieto materiáli:
https://www.youtube.com/watch?…
https://www.youtube.com/watch?…

predpokladám že som zle pochopil účel hlavičky, potreboval by som poradiť ako mail odoslať zo stránky na zadaný mail používateľa. Ďakujem za každú pomoc.

 
Odpovědět
6.1.2019 19:28
Avatar
Hando
Člen
Avatar
Hando:6.1.2019 20:37

Ahoj.
1.) A zkoušíš to kde? Na localhostu, nebo někde na normálním serveru?
2.) Jak se projevuje, že to nefunguje? Že mail nedorazí ještě neznamená, že se neodeslal. :)
3.) Headers jsou trochu magie - než se s tím patlat, tak bych rovnou doporučil používat nějakou knihovnu (PHPMailer, Nette mailer, swift mailer) - tam budeš takových věcí ušetřen.

Ta videa jsou nějaká divná, přiznávám se, že jsem je nestudoval - polovina negativních hodnocení není úplně dobrá vizitka.

Na příklad nastavení hlaviček a češtiny se můžeš podívat sem: Problémy s e-maily - mě to vždy fungovalo, pokud jsem nepoužíval knihovny.

 
Nahoru Odpovědět
6.1.2019 20:37
Avatar
3012
Člen
Avatar
3012:6.1.2019 21:36

ahoj, ďakujem že si odpísal. Skúšam to na hostingu: https://www.000webhost.com/ . prejavuje sa to následným hlásením:
Warning: mb_send_mail() has been disabled for security reasons in /storage/ssd1/919/­8387919/public_html/in­dex.php on line 14

Email failed to send. Check the address.
zdrojoví kod stránky som sem dal a hlásenie píše chibu na 14 riadku, zasekáva sa to pri mb_send_mail, neviem príjst na to kde je chyba, vždy to opravím ale vždy je chiba pri mb_send_mail
ďakujem aj za odkaz študujem ho, čo sa týka videí, viem že neboli príliš dobre hodnotené, no iné som zatiaľ nenašiel.

 
Nahoru Odpovědět
6.1.2019 21:36
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7.1.2019 7:51

translate.goo­gle.com = mb_send_mail() has been disabled for security reasons

Nejspis ta funkce byla zakazana. Nejspis adminem serveru, aby neslo odesilat maily. Pokud je to free hosting, nejspis bude nekde tabulka, co vsechno takovy free povoluje a co uz ne proti placene verzi. Pomoci phpinfo() by se to melo dat take zjistit.
Pravdepodobne ti nepujde pouzit ani funkce mail(). Tim padem odpada moznost pouziti knihoven jako php-mailer.

Ja mam na mail treba tohle, ale to ti asi nepomuze. Posledni radek je prave funkce mail.

<?php
class classMail
{
//private $to, $subject, $message, $headers;
private $sep, $server;

function __construct($server=array())
        {
        $this->sep = PHP_EOL;
        $this->server = $server;
        }

private function fileToBase64($str)
        {
        return chunk_split(base64_encode($str), 76, $this->sep);
//      return  wordwrap(base64_encode($data['content']), 76, $this->sep, true);
        }

private function createMessage($data)
        {
        if (!isset($data['content']) || $data['content']=='' || !isset($data['type']))
                {
                return;
                }
        $out = array();
        switch ($data['type'])
                {
                // pro mail-body
                case 'text':            // array('type'=>'text', 'content'=>'a\nb\nc')
                case 'text_file':       // array('type'=>'text_file', 'content'=>file_get_contents('path')}
                        {
                        $out[] = 'Content-type: text/plain; charset=utf-8';     //'Content-type: text/html; charset=iso-8859-1',
                        if ($data['type']=='text')
                                {
                                $out[] = 'Content-Transfer-Encoding: quoted-printable';
                                $out[] = '';
                                $out[] = $data['content'];
                                break;
                                }
                        $out[] = 'Content-Transfer-Encoding: base64';
                        $out[] = '';
                        $out[] = $this->fileToBase64($data['content']);
                        break;
                        }
                case 'html':
                case 'html_file':
                        {
                        $out[] = 'Content-type: text/html; charset=utf-8';
                        if ($data['type']=='html')
                                {
                                $out[] = '';
                                $out[] = $data['content'];
                                break;
                                }
                        $out[] = 'Content-Transfer-Encoding: base64';
                        $out[] = '';
                        $out[] = $this->filetoBase64($data['content']);
                        }
                // pro mail-att
                case 'file':
                        $out[] = 'Content-type: text/html; charset=utf-8';
                        $out[] = 'Content-Type: application/octet-stream; name="'.$data['filename'].'"';
                        $out[] = 'Content-Transfer-Encoding: base64';
                        $out[] = 'Content-Disposition: attachment; filename="'.$data['filename'].'"';
                        $out[] = '';
                        $out[] = $this->fileToBase64($data['content']);
                        break;
                default: break;
                }
        return $out;
        }

//private function headersCreate()
//      {
//      }

//private function messagesCreate()
//      {
//      }

//rfc2557 ? https://tools.ietf.org/html/rfc2557 | https://www.ietf.org/rfc/rfc2557.txt / 1999
// https://tools.ietf.org/html/rfc7231#section-3.1.4.2
public function send($form, $server=array())    //$from, $to, $subject, $message, $domena
        {
        $keys = array(
                'from',
                'to',
                'notify',
                'subject',
                'message',
                'att'
                );
        foreach ($keys as $value)
                {
                $$value = isset($form[$value]) ? $form[$value] : '';
                }
        if (!isset($from) || $from==""
                || !isset($to) || $to==""
                || !isset($subject) || $subject==""
                )
                {
                return;
                }
        //if ($domena=="localhost ") {return false;} // upraveno
        $from_text    = $from;
        $to_text      = $to;
        $subject_text = $subject;
        $from      = "=?utf-8?B?".base64_encode($from)   ."?=";
        $to        = "=?utf-8?B?".base64_encode($to)     ."?=";
        $subject   = "=?utf-8?B?".base64_encode($subject)."?=";

        $uid       = substr(sha1(uniqid(time())),0,20);
        $uid       = 'NextPart uid=' . $uid;
//      $part_sep  = '--NextPart uid=' . $uid;
//      $uid_sep = '--'.$uid;

        // ??? RFC 821, RFC 2821, rfc1341
        $headers   = array();
        $headers[] = "From: $from";
        $headers[] = "Reply-To: $from";
        $headers[] = "Return-To: $from";
        if ($form['notify']==true)
                {
                $headers[] = "Disposition-Notification-To: $from";
                $headers[] = "Return-Receipt-To: $from";
                }
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'X-Mailer: PHP/' . phpversion();
        $headers[] = 'Content-Type: multipart/mixed; boundary="' . $uid . '"';
//      $headers[] = '';        // pro slu.cz musi byt zakomentovano
        $headers[] = 'This is a multi-part message in MIME format.';
        $headers   = implode($this->sep, $headers);

        $messages   = array();
        $messages[] = 'test zprava';
        if (isset($message) && trim($message)!=='')     // $form['message']
                {
                array_unshift($att, $this->createMessage(array('type'=>'text', 'content'=>$message)));
                }
        if (count($att)>0)
                {
                foreach($att as $item)
                        {
                        $messages[] = '--' . $uid;
                        $messages[] = implode($this->sep, $this->createMessage($item));
//                      $messages[] = '';
                        $messages[] = '';
                        }
                }

/*
Nefunguje to, aspon Thunderbird ten obrazek nezobrazi
        $messages[] = '--' . $uid;
        $messages[] = 'Content-Type:Text/html; charset="US-ASCII"';
        $messages[] = '';
        $messages[] = '<html><head><title>Test
          </title></head>
          <body><img src="http://www.dsv.su.se/~yvonne-b/yvonne.jpg"/> yvonne.jpg
          <img src="teckning.gif"/> teckning.gif
<IMG SRC="cid:foo4atfoo1atbar.net" ALT="IETF logo">
          </body></html>';
        $messages[] = '';
        $messages[] = '';

        $messages[] = '--' . $uid;
        $messages[] = 'Content-Type: image/jpg';
        $messages[] = 'Content-Transfer-Encoding: base64';
        $messages[] = 'Content-ID: <foo4atfoo1atbar.net>';
        $messages[] = 'Content-Location: cid:foo4atfoo1atbar.net';
        $messages[] = '';
        $messages[] = 'R0lGODlhPABSAMQAAP///+He3tXU2sjK1bzB0K+3zKOtx5ajw4qavX2QuXCGtGR9r1dyrExppz9gojJW
nSZMmBlClAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAA
AAA8AFIAAAX/YCCOZGmewbKgbOu+55IkK2zfsEzjfF8KDofAR8QtHAaDo1ZsmgaKBCSSjEASioFze3g4
IAxFJKJgeB+Hre/QeDwW7wCj4WCk6l5GWv0SKB5jD3NDDSoNAQJ0gBBxfC00EAgNUQ4iDQ1zIg5YDQhu
CY4oAw0RaYUKhwGXl5YKC4cHEEyhAQMEAQkODyJzDEIBdUeIggx2AYIKAglDjioDYcYIYDQFCkFZDAkN
kbwNMwfGagVjArGFBnoODQZyuisGdAcLBq8NBQRjjkAIiFh+A0G8bAsCQVEQKH6W4ZpFRIAvXwpGEHjl
YIzFixjrMLgVgMCXgr94CDhy6UsqEQIA/80hViBIAYqYIjxgFqBASTAOIuKgQaecgQQEtIhYoIDANkAY
HxScyKTAswMGBjDaiAPBgnsNAIopJULBlDcJDhQYWwABjUU6';
        $messages[] = '';
        $messages[] = '';
*/

        $messages[] = '--' . $uid . '--';
        $messages   = implode($this->sep, $messages);

        // set mail server, if not set in php.ini
        $server  = count($server)>0 ? $server : $this->server;
        $key_all = array('SMTP', 'smtp_port', 'sendmail_from');
        foreach($key_all as $key)
                {
                if (isset($server[$key]))
                        {
                        ini_set($key, $server[$key]);
                        }
                }
        // send mail
//echo '<hr><pre>'; var_dump(array($to_text, $subject, $messages, $headers)); echo '</pre>';
//die();
        return mail($to_text, $subject, $messages, $headers);
        }
}
//                      $this->createMessage($messages, $item);
//                      $this->createMessage($messages, array('type'=>'file', 'content'=>file_get_contents($item['path'])));
///     $message = array();
//      foreach ($messages as $value)
///             {
//              }
?>

Odeslani mailu vypada nejak takhle

public function mailSend($form)
        {
        $MAIL = new classMail(array(
                'SMTP'          => "mujserversmtp.cz",
                'smtp_port'     => "25",
                'sendmail_from' => $form['mail']['from']
                ));
        $to   = $form['mail']['to'];
        $bool = $MAIL->send(array(
                'from'    => $form['mail']['from'],
                'to'      => $to,
                'notify'  => false,
                'subject' => $form['mail']['subject'],
                'message' => '',
                'att'     => $form['mail']['att']
                ));
        $to   = $to=='' ? 'prazdna' : '';
        if ($bool)
                {
                fce_notice('Mail byl uspesne odeslan na adresu '.$to.'.', 'success');
                }
        else    {
                fce_notice('Odeslani mailu selhalo (adresa prijemce '.$to.').', 'error');
                }
        return $bool;
        }
Editováno 7.1.2019 7:53
 
Nahoru Odpovědět
7.1.2019 7:51
Avatar
3012
Člen
Avatar
3012:7.1.2019 11:34

ahojte veľmy vám všetkým ďakujem za pomoc, skúšal som ešte jeden hosting a tam mi fungoval pôvodný spôsob. Odkaz na hosting uvádzam tu: https://www.webzdarma.cz/ . jediná vada na kráse je že sa mail objaví v spame, ale funguje to.

 
Nahoru Odpovědět
7.1.2019 11:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7.1.2019 13:12

Od wz davam ja ruce pryc. Tam my smazali webku jen tak. Naprosto ignorovali, ze mam na webce uvedene kontakty.

Proti spamu je dulezita hlavicka a neposilat maily moc casto. Pokud potrebujes vice mailu (a mimo nocni hodiny), musis se domluvit s adminy.
Hlavicka by mela stacit tahle, pripadne zpatecni adresy. Ty by meli existovat.

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'X-Mailer: PHP/' . phpversion();

U mailu je spoustu vychytavek, kvuli kterym to nedojde nebo hodi do spamu. To je treba pozjistovat u admina serveru, na ktery to melo prijit nebo ze ktereho to melo odejit. Ma tam logy.

 
Nahoru Odpovědět
7.1.2019 13:12
Avatar
Odpovídá na 3012
Matúš Petrofčík:7.1.2019 13:33

Trochu offtopic, ale môžeš namiesto vlastného PHP maileru skúsiť nejaký existujúci balíček s pomocou Composer-u (odkaz na článek).

V článku sa nachádza ukážka použitia balíčka PhpMailer.

Alternatívne môžeš použiť napr. SwiftMailer.

Nahoru Odpovědět
7.1.2019 13:33
obsah kocky = r^2 ... a preto vlak drnká
Avatar
3012
Člen
Avatar
3012:7.1.2019 15:58

ďakujem, za rady. čo sa tíka web zdarma, len tam testujem, všetky stránky mám zálohované na disku, momntálne pýšem len prototyp, nakoniec to pobeží na uplne inom servere, táto verzia na webzdarma nemá byť vôbec pre pouzívateľa takže ak to zmažú nemám problém si vytvoriť ďalší. Na Composer saešte pozriem. ešte raz všetkým ďakujem za pomoc.

 
Nahoru Odpovědět
7.1.2019 15:58
Avatar
Jan Tesař
Člen
Avatar
Jan Tesař:12.1.2019 14:08

Ahoj mám dotaz ohledně použití if (!preg_match("/^[a-zA-Z ]*$/",$name)) v českém jazyce při kontrole dat z formuláře, pokud napíšu jméno s interpunkcí např. s -ř, provede to podmínku(např. vypíše chybovou hlášku), zkusil jsem to ošetřit přidáním ř(což např. s 9 fungovalo) do podmínky if (!preg_match("/^[a-zA-Zř ]*$/",$name)) a provedlo to podmínku stejně. Dík za radu. Honza

 
Nahoru Odpovědět
12.1.2019 14:08
Avatar

Člen
Avatar
Odpovídá na Jan Tesař
:12.1.2019 16:21

Najefektívnejšie to bude, ak to urobíš nejako takto:

$czechAlphabet = "AÁBCČDĎEÉĚFGHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽaábcčdďeéěfghiíjklmnňoópqrřsštťuúůvwxyýzž";

if (!preg_match("/^[$czechAlphabet]+$/", $name)) {
        //Error
}
Editováno 12.1.2019 16:21
 
Nahoru Odpovědět
12.1.2019 16:21
Avatar
Jan Tesař
Člen
Avatar
Odpovídá na
Jan Tesař:12.1.2019 18:40

Ahoj, nevěděl jsem jestli tam nemáš překlep a nepatří tam místo +$ dát *$, nicméně to nefunguje tak ani tak, myslím že je to totéž jako když jsem tam dopsal ř, a chtěl následně dopsat všechny písmenka s interpunkcí, problém je asi právě v tom, že příkaz neakceptuje písmenka s interpunkcí - nefungovalo to ani na localhostu, ani na webhostingu.

děkuji
Honza

 
Nahoru Odpovědět
12.1.2019 18:40
Avatar

Člen
Avatar
Odpovídá na Jan Tesař
:13.1.2019 12:04

Ahoj, to + je tam zámerne, aby vrátilo 0, ktorá je implicitne konvertovaná na false, keď premenná $name je prázdny string. Mohol by si mi poslať nejaký príklad hodnoty uloženej v $name?

Editováno 13.1.2019 12:06
 
Nahoru Odpovědět
13.1.2019 12:04
Avatar
Jan Tesař
Člen
Avatar
Odpovídá na
Jan Tesař:13.1.2019 12:37

Děkuji, dám tam +, už to funguje, chyba na mojí straně - nepřepnul jsem si kódovaní v PSPadu, ale toho času a zkoušení, než mi to došlo, ach jo.

 
Nahoru Odpovědět
13.1.2019 12:37
Avatar
Odpovídá na 3012
Jaroslav Patrný:28.4.2019 17:40

Ahoj, na FREE https://www.000webhost.com/ je funkce mb_send_mail() zakázaná a u FREE ji není možné povolit.

 
Nahoru Odpovědět
28.4.2019 17:40
Avatar
3012
Člen
Avatar
Odpovídá na Jaroslav Patrný
3012:8.5.2019 13:12

ďakujem

 
Nahoru Odpovědět
8.5.2019 13:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.