2013-10-30 25 views
3

我已经看过一些解决方案,并没有一个工作。php mail()/ r/n和<br>没有效果

<?php 
    $name = $_POST['name'] . "<br>" ; 
    $email = $_POST['email'] . "/r/n"; 
    $phone = $_POST['phone'] . "/r/n"; 
    $message = $_POST['message'] . "/r/n"; 
    $from = 'From: [email protected]'; 
    $to = '[email protected]'; 
    $subject = 'subject here'; 

    $body = "From: $name E-Mail: $email Phone: $phone $message" 
?> 
<?php 
    if ($_POST['submit']) { 
     if (mail ($to, $subject, $body, $from)) { 
      echo '<p>Your message has been sent</p>'; 
     }else{ 
      echo '<p>Something went wrong, go back and try again.</p>'; 
     } 
    } 
?> 

这不仅显示在同一行的一切,同时也展示了/ R/N和
标签,就好像他们只是文本。

回答

13

简单:

你需要改变所有的/r/n\r\n

现在为了<br>是有效的,你需要添加这个在您的headers

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

咨询PHP有关mail()headers()的更多信息,请参考手册

+1

+1虽然PHP常量'PHP_EOL'也是一个不错的选择 – Phil

+1

我相信邮件协议需要'\ r \ N',从而赢得'不一定和'PHP_EOL'一样。 – zneak

+0

@zneak那么你认为我应该删除我提到的那个呢?尽管几分钟前我研究过它,但确实发现了一些信息。 –

2

<br>,因为你不发送HTML电子邮件将无法正常工作。为什么不干脆建造一个HEREDOC块正文,如

$name = isset($_POST['name']) ? $_POST['name'] : 'Not set'; 
$email = isset($_POST['email']) ? $_POST['email'] : 'Not set'; 
$phone = isset($_POST['phone']) ? $_POST['phone'] : 'Not set'; 
$message = isset($_POST['message']) ? $_POST['message'] : null; 

$body = <<<_TXT 
From: $name 
E-mail: $email 
Phone: $phone 

$message 
_TXT;