Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween
Avatar
Neaktivní uživatel:4.5.2018 15:05

Dobrý den, používám phpmailer 5.2.25. Většinu se mi podařilo počeštit, ale tělo emailu, co mi z webu dojde je v angličtině. Nevíte, jak to předělat do češtiny? V příloze zasílám screen.

Odpovědět
4.5.2018 15:05
Neaktivní uživatelský účet
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:4.5.2018 16:23

PhpMailer samotný tam nic takového nedává, někde si to tam prodáváš sám.

Nahoru Odpovědět
4.5.2018 16:23
the cake is a lie
Avatar
Neaktivní uživatel:4.5.2018 17:09

Jedná se o contact form s captchou, které k funkčnosti phpmailer využívá.

Nahoru Odpovědět
4.5.2018 17:09
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:4.5.2018 17:16

Čekal bych, že by se to dalo přeložit v tomto souboru, ale nikde nic.

<?php
namespace FormGuide\Handlx;
use FormGuide\PHPFor­mValidator\For­mValidator;
use PHPMailer;
use FormGuide\Han­dlx\Microtempla­te;
use Gregwar\Captcha\Cap­tchaBuilder;

/**
* FormHandler
* A wrapper class that handles common form handling tasks
* - handles Form validations using PHPFormValidator class
* - sends email using PHPMailer
* - can handle captcha validation
* - can handle file uploads and attaching the upload to email
*
* ==== Sample usage ====
* $fh = FormHandler::cre­ate()->validate(fun­ction($valida­tor)
* {
* $validator->fields(['name','e­mail'])
* ->areRequired()->maxLength(50);
* $validator->field('email')->isEmail();
*
* })->useMailTempla­te(__DIR__.'/tem­pl/email.php')
* ->sendEmailTo('y­[email protected]');
*
* $fh->process($_POST);
*/

class FormHandler
{
private $emails;
public $validator;
private $mailer;
private $mail_template;
private $captcha;
private $attachments;
private $recaptcha;

public function __construct()
{
$this->emails = array();
$this->validator = FormValidator::cre­ate();
$this->mailer = new PHPMailer;
$this->mail_template='';

$this->mailer->Subject = "Zprava z aliencomputers.cz ";

$host = isset($_SERVER['SER­VER_NAME'])?$_SER­VER['SERVER_NA­ME']:'localhos­t';
$from_email ='[email protected]'.$host;
$this->mailer->setFrom($from_e­mail,'OZNAMENI',fal­se);

$this->captcha = false;

$this->attachments = [];

$this->recaptcha =null;

}
/**
* sendEmailTo: add a recipient email address
* @param string/array $email_s one or more emails. If more than one emails, pass the emails as array
* @return The form handler object itself so that the methods can be chained
*/
public function sendEmailTo($e­mail_s)
{
if(is_array($e­mail_s))
{
$this->emails =array_merge($this->emails, $email_s);
}
else
{
$this->emails[] = $email_s;
}

return $this;
}

public function useMailTempla­te($templ_pat­h)
{
$this->mail_template = $templ_path;
return $this;
}

/**
* [attachFiles find the file uplods and attach to the email]
* @param array $fields The array of field names
*/
public function attachFiles($fi­elds)
{
$this->attachments = array_merge($this->attachments, $fields);
return $this;
}

public function getRecipients()
{
return $this->emails;
}

/**
* [validate add Validations. This function takes a call back function which receives the PHPFormValidator object]
* @param function $validator_fn The funtion gets a validator parameter using which, you can add validations
*/
public function validate($vali­dator_fn)
{
$validator_fn($this->validator);
return $this;
}

public function requireReCaptcha($con­fig_fn=null)
{
$this->recaptcha = new ReCaptchaVali­dator();
$this->recaptcha->enable(true);
if($config_fn)
{
$config_fn($this->recaptcha);
}
return $this;
}
public function getReCaptcha()
{
return $this->recaptcha;
}

public function requireCaptcha($e­nable=true)
{
$this->captcha = $enable;
return $this;
}

public function getValidator()
{
return $this->validator;
}

public function configMailer($ma­ilconfig_fn)
{
$mailconfig_fn($this->mailer);
return $this;
}

public function getMailer()
{
return $this->mailer;
}

public static function create()
{
return new FormHandler();
}

public function process($post_data)
{
if($this->captcha === true)
{
$res = $this->validate_cap­tcha($post_da­ta);
if($res !== true)
{
return $res;
}
}
if($this->recaptcha !== null &&
$this->recaptcha->isEnabled())
{
if($this->recaptcha->validate() !== true)
{
return json_encode([
'result'=>'re­captcha_valida­tion_failed',
'errors'=>['cap­tcha'=>'Ověře­ní protokolu ReCaptcha se nezdařilo.']
]);
}
}

$this->validator->test($post_data);

//if(false == $this->validator->test($post_data))
if($this->validator->hasErrors())
{
return json_encode([
'result'=>'va­lidation_failed',
'errors'=>$this->validator->getErrors(/as­sociative/ true)
]);
}

if(!empty($this->emails))
{
foreach($this->emails as $email)
{
$this->mailer->addAddress($e­mail);
}
$this->compose_mail($pos­t_data);

if(!empty($this->attachments))
{
$this->attach_files();
}

if(!$this->mailer->send())
{
return json_encode([
'result'=>'error_sen­ding_email',
'errors'=> ['mail'=> $this->mailer->ErrorInfo]
]);
}
}

return json_encode(['re­sult'=>'succes­s']);
}

private function validate_captcha($pos­t)
{
@session_start();
if(empty($pos­t['captcha']))
{
return json_encode([
'result'=>'cap­tcha_error',
'errors'=>['cap­tcha'=>'Opište prosím captcha kód.']
]);
}
else
{
$usercaptcha = trim($post['cap­tcha']);

if($_SESSION['u­ser_phrase'] !== $usercaptcha)
{
return json_encode([
'result'=>'cap­tcha_error',
'errors'=>['cap­tcha'=>'Captcha kód nebyl opsán správně.']
]);
}
}
return true;
}

private function attach_files()
{

foreach($this->attachments as $file_field)
{
if (!array_key_e­xists($file_fi­eld, $_FILES))
{
continue;
}
$filename = $_FILES[$file_fi­eld]['name'];

$uploadfile = tempnam(sys_get­_temp_dir(), sha1($filename));

if (!move_uploaded_fi­le($_FILES[$fi­le_field]['tmp_na­me'],
$uploadfile))
{
continue;
}

$this->mailer->addAttachmen­t($uploadfile, $filename);
}
}

private function compose_mail($post)
{
$content = "Zpráva z webu aliencomputers.cz: \n\n";
foreach($post as $name=>$value)
{
$content .= ucwords($name)­.":\n";
$content .= "$value\n\n";
}
$this->mailer->Body = $content;
}
}

Editováno 4.5.2018 17:17
Nahoru Odpovědět
4.5.2018 17:16
Neaktivní uživatelský účet
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:4.5.2018 18:56

Protože neumíš hledat, protože jsi to očividně odněkud zkopíroval a protože problém není s PhpMailerem.
Používej zvýrazňování kódu pomocí tlačítka </> v menu editoru, kdybych na tu chybu nenarazil hned, protože je naprosto triviální, vůbec bych se tím nezaobíral, protože se to nedá číst.


Chyba je tady:

function compose_mail($post)
{
        $content = "Zpráva z webu aliencomputers.cz: \n\n";
        foreach($post as $name => $value)
        {
                $content.= ucwords($name)  . ":\n";
                $content.= "$value\n\n";
        }

        $this->mailer->Body = $content;
}

Očivině se do toho cpou data z pole $_POST a klíče tvoří to jméno. Takže tam někde ve formuláři máš něco jako

<input name="name">

a

<textarea name="message"></textarea>

Doufám, že chápeš, kde se to tam bere. Oprava je triviální, u $content.= ucwords($name) . ":\n"; musíš přidat nějaký switch, co rozhodne, jak se zobrazí $name. Nedoporučoval bych přejmenovat ten input, protože potom budeš muset upravovat další střeva toho formuláře.

Editováno 4.5.2018 18:58
Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
4.5.2018 18:56
the cake is a lie
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:4.5.2018 19:00

Jo, a mimochodem, všechna samotná \n bys měl nahradit za \r\n, je to ve standardu formát e-mailu.

Nahoru Odpovědět
4.5.2018 19:00
the cake is a lie
Avatar
Neaktivní uživatel:4.5.2018 19:26

Opravil jsem ty samostatná \n, ale nevidím tu chybu v funkcích, jelikož nejsem programátor. Mám pouze základy ze střední školy.

Nahoru Odpovědět
4.5.2018 19:26
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:4.5.2018 20:40

Našel jsem i ty

<textarea name="message"></textarea>

a

<input name="name">

Po pokusu přejmenovat je to přestalo fungovat.

Nahoru Odpovědět
4.5.2018 20:40
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:5.5.2018 11:00

Můj pokus o switch nevyšel a způsobil, že formulář přestal fungovat. Nevíte, kde jsem udělal chybu?

switch ($post) {
    case 1:
        name = "Jméno";
        break;
    case 2:
        name = "E-mail";
        break;
    case 3:
        name = "Zpráva";
        break;
}
Nahoru Odpovědět
5.5.2018 11:00
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:5.5.2018 21:08

Opraveno, díky za navedení na funkci. Zde je opravená funkce:

        private function compose_mail($post)
        {
                $content = "Zpráva z webu aliencomputers.cz \r\n";
                foreach($post as $name=>$value)
                {
                        $content .= ucwords($name).":\r\n";
                        $content .= "$value\r\n";
                }
                $this->mailer->Body  = "Odesílatel : ".$_POST['name']."<br /> E-mail : ".$_POST['email']."<br />Zpráva : ".$_POST['message'];
        }
}
Nahoru Odpovědět
5.5.2018 21:08
Neaktivní uživatelský účet
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 10 zpráv z 10.