Я проверил ваш код и он работал с тем, что у меня есть для кода ниже, добавив session_start();
, а также мой собственный адрес электронной почты.
То, что я думаю, что может происходить в том, что и с From
Адреса электронной почты приходят от имени сеанса, и session_start();
не может быть включено в вашем коде, и это не было показано вашими, Email From
пуст и не было установлено.
(я должен был бы видеть ваш полный код как для вашего HTML-формы и PHP.)
Успешное (проверено) Код:
<?php
session_unset(); // unset any previously set session and start a new one after
session_start(); // required when using sessions
// session variable set to Email (From) address
// Which could be coming from a POST variable
// $_SESSION['odesilatel'] = $_POST['from_email']; // example
$_SESSION['odesilatel'] = "[email protected]";
// check if session is empty
if(empty($_SESSION['odesilatel'])){ die("Session name is not set, stopping execution of script."); }
$odesilatel = $_SESSION['odesilatel']; //this works, $odesilatel displays the right content
$komu = "[email protected], [email protected]";
$predmet = "Objednávka z newsletteru";
$hlavicka = 'From: '.$odesilatel. "\n";
$hlavicka .= 'MIME-Version: 1.0' . "\n";
$hlavicka .= 'Content-type: text/html; charset=UTF-8' . "\n";
$hlavicka .= 'Content-Transfer-Encoding: 8bit' . "\n";
$zprava = "I have some HTML code here. It's not important what it is...";
if(mail($komu, $predmet, $zprava, $hlavicka)){
echo 'E-mail byl úspešne odeslán. Dekujeme za objednávku.';
echo $_SESSION['odesilatel']; // echo'ed my Email address
}
else{ echo 'E-mail se bohužel nepodarilo odeslat.';}
То, что я предлагаю вам сделать, это установить условное выражение, чтобы проверить, установлено ли имя сеанса или нет, или еще лучше проверить, является ли оно пустым.
т.е .:
if(!isset($_SESSION['odesilatel'])){ die("Session name is not set, stopping execution of script."); }
но если сеанс пуст, например $_SESSION['odesilatel'] = "";
почты будет послан, но в конечном итоге в СПАМ, так как From
не распознается.
Поэтому использование if(empty
было бы лучшим вариантом.
if(empty($_SESSION['odesilatel'])){ die("Session name is not set, stopping execution of script."); }
Я также предлагаю вам сделать var_dump();
Ie:
var_dump($_SESSION['odesilatel']);
или:
var_dump($_SESSION);
, чтобы посмотреть, что идет вверх, и если он пуст, то, что будет сигнализировать о проблеме, а также показать вам, действительно ли From
установлен или пуст.
Попробуйте "From: $ odesilatel \ n"; –
Прежде чем избавиться от символа «@» перед вызовом функции. Этот символ затмевает все ошибки, если таковые имеются. –
'echo' или записывать где-нибудь ваши заголовки' $ hlavicka' при использовании '$ odesilatel', возможно, эта переменная не содержит то, что вы ожидаете от нее (возможно, дополнительные пробелы или символы перевода строки?) – Fanis