2016-10-26 2 views
-1

Почему сообщение идет в одной строке? после того, как я добавил $headers, мое сообщение начиналось в одной строке.line breaks is not

<?php 

// your email 
$user_email = "[email protected]"; 

$mail = array(
    "name" => htmlspecialchars($_POST['cf_name']), 
    "email" => htmlspecialchars($_POST['cf_email']), 
    "subject" => htmlspecialchars($_POST['cf_subject']), 
    "assunto" => 'Novo contato realizado via website',  
    "message" => htmlspecialchars($_POST['cf_message']) 
); 

$nome = $_POST['cf_name']; 
$email = $_POST['cf_email']; 
$assunto = $_POST['cf_subject']; 
$assunto_mensagem = 'Novo contato realizado via website'; 
$mensagem = $_POST['cf_message']; 

$assunto = 'Novo contato realizado a partir do site Font Life'; 

$headers = "MIME-Version: 1.1\r\n". 
       "Content-type: text/html; charset=utf-8\n". 
       "Content-Transfer-Encoding: 8bit\n". 
       "From: ". $_POST['cf_name'] ." <". $_POST['cf_email'] .">\n". 
       "Reply-to: ". $_POST['cf_name'] ." <". $_POST['cf_email'] .">\n". 
       "Date: ". date("r"). "\n"; 

function validate($arr){ 

    return !empty($arr['name']) && strlen($arr['message']) > 20 && filter_var($arr['email'],FILTER_VALIDATE_EMAIL); 

} 

if(validate($mail)){ 

    echo mail($user_email, $mail['assunto'], 
     "Nome : $nome\n" 
     ."Assunto : $assunto\n" 
     ."E-mail : $email\n" 
     ."Mensagem : $mensagem\n", 
     $headers 
    ); 

} 

?> 

сообщение приходит как эти:

Имя: Педро Assunto: Ново contato realizado Partir сделать сайт Font Life Электронная почта: [email protected] Mensagem: asdklnasklasdmklasdmasdçlasd, mçasd

В моем коде есть ошибка?

+0

Вы отправляете в заголовках html не обычный текст, поэтому там и вашему коду нужны работы. Прочтите руководство по почте. http://php.net/manual/en/function.mail.php или использовать phpmailer. –

ответ

2
  1. Вы должны разделить заголовки на \r\n (и не только \n).
  2. Содержание должно быть html - поэтому в содержании вы должны использовать <br> для разрыва строки.


Это заголовки часть:

$headers = "MIME-Version: 1.1\r\n". 
      "Content-type: text/html; charset=utf-8\r\n". 
      "Content-Transfer-Encoding: 8bit\r\n". 
      "From: ". $_POST['cf_name'] ." <". $_POST['cf_email'] .">\r\n". 
      "Reply-to: ". $_POST['cf_name'] ." <". $_POST['cf_email'] .">\r\n". 
      "Date: ". date("r"); 

Это вызов функции почты:

mail($user_email, $mail['assunto'], 
    "Nome : $nome<br />\n". 
    "Assunto : $assunto<br />\n". 
    "E-mail : $email<br />\n". 
    "Mensagem : $mensagem<br />\n", 
    $headers 
); 
+0

Да, '
' необходимо для разрыва строк, а заголовки не должны * не отображаться перед содержимым - 'mail()' имеет параметр для заголовков - http://php.net/manual/en/function .mail.php – Steve

+0

@Steve, ответ обновлен, спасибо за примечание. – Dekel

+0

спасибо, я думал, что тело письма просто нужно '\ n', я просто добавил'
', и он сработал. –

1

использовать это, вероятно, работать !!!

 echo mail($user_email, $mail['assunto'], 
      "Nome : $nome". <br><br>" 
      . "Assunto : $assunto"." <br><br>" 
      ."E-mail : $email"."<br> <br>" 
      ."Mensagem : $mensagem" 
      ."<br><br> ", 
      $headers 
);