2013-10-30 47 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;