2014-02-04 4 views
1

У меня есть следующий скрипт:PHP почты переменной в заголовке From:

$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 úspěšně odeslán. Děkujeme za objednávku.';} 
else{ 
    echo 'E-mail se bohužel nepodařilo odeslat.';} 

Если удалить переменную из части заголовка, где С: это и пишут здесь некоторые адрес электронной почты, почта доставляется. Но если я использую переменную, почта отправляется (отображается эхо), но она не доставляется. Как правильно писать заголовок с помощью From: и переменной?

Большое спасибо за помощь.

Bc. Michal Vlasák

+0

Попробуйте "From: $ odesilatel \ n"; –

+2

Прежде чем избавиться от символа «@» перед вызовом функции. Этот символ затмевает все ошибки, если таковые имеются. –

+0

'echo' или записывать где-нибудь ваши заголовки' $ hlavicka' при использовании '$ odesilatel', возможно, эта переменная не содержит то, что вы ожидаете от нее (возможно, дополнительные пробелы или символы перевода строки?) – Fanis

ответ

0

Я проверил ваш код и он работал с тем, что у меня есть для кода ниже, добавив 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 установлен или пуст.

+0

Я пробовал ваши предложения по моей новой форме, и внезапно это стало успешным. Поэтому ваше предложение - это решение, которое я думаю. Спасибо. –

+0

Вы очень желанны, рад, что я могу помочь предложить решение. @ MichalVlasák –

0

Попробуйте сначала установить MIME-версию и Content-type.

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //or another encoding 
$headers .= 'From: ' . $variable . "\r\n"; 
+0

Спасибо, но это не решение. Заголовок неожиданно является частью сообщения, и я получил дополнительное предупреждение о спаме. –

0

И, наконец, email.php, которые отправляют данные по электронной почте. Используются ваши предложения.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<HTML> 
    <HEAD> 
    <META http-equiv="content-type" content="text/html; charset=utf-8"> 
    <META name="generator" content="PSPad editor, www.pspad.com"> 
    <TITLE>Potvrzení údajů</TITLE> 
    <STYLE type="text/css"> 
    .tabulkaobjednavka{border: 1px solid #339935;} 
    .tabulkanadpis{font-family: sans-serif; font-size: 14px; color: #ffffff; background-color: #339935; padding-left: 5px;} 
    .bunkyobjednavky{font-family: serif; font-size: 14px; color: #339935; padding-left: 5px;} 
    </STYLE> 
    </HEAD> 
    <BODY> 
    <?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 
    session_start(); 

    if(isset($_POST['potvrdit'])){ 
     $vypis = $_SESSION['vypis']; 
     $odesilatel = $_SESSION['odesilatel']; 
    if(empty($_SESSION['odesilatel'])){ die("Session name is not set, stopping execution of script.");} 

     $komu = "[email protected]"; 
     $predmet = "Objednávka z newsletteru"; 
     $headers = 'MIME-Version: 1.0' . "\n"; 
     $headers .= 'Content-type: text/html; charset=utf-8' . "\n"; 
     $headers .= 'From: ' . $odesilatel; 
     $zprava = 
     " 
     <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> 
     <HTML> 
     <HEAD> 
     <META http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"> 
     <STYLE type=\"text/css\"> 
      td.tabulkaobjednavka{border: 1px solid #339935;} 
      td.tabulkanadpis{font-family: sans-serif; font-size: 14px; color: #ffffff; background-color: #339935; padding-left: 5px;} 
      td.bunkyobjednavky{font-family: serif; font-size: 14px; color: #339935; padding-left: 5px;} 
     </STYLE> 
     <TITLE>E-mail</TITLE> 
     </HEAD> 
     <BODY>".$vypis."</BODY> 
     </HTML>"; 

     if(mail($komu, $predmet, $zprava, $headers)){ 
      echo '<P class="bunkyobjednavky">E-mail byl úspěšně odeslán. Děkujeme za objednávku.</P>';} 
     else{ 
      echo '<P class="bunkyobjednavky">E-mail se bohužel nepodařilo odeslat.</P>';}} 
    ?> 
</BODY> 
</HTML> 

Я не знаю, что делать. Я думаю об этом в течение месяца.

Смежные вопросы