2012-01-08 30 views
5

Tôi đã nhận hàm PHP mail(): làm việc cho một biểu mẫu tôi đang sử dụng trên trang web của mình. Tôi hiện đang cố gắng định dạng thuộc tính $ body để trông đẹp hơn và được tổ chức hơn khi tôi nhận được e-mail tiếp theo.

Tôi đã thử \ n và tôi đã cố gắng
và cả cho tôi

Dưới đây là đoạn mã mà tôi đang làm việc với (Tôi nghĩ rằng nó chỉ là một vấn đề cú pháp mà tôi đang làm sai):

if(!empty($brandname) && !empty($firstname) && !empty($lastname) && !empty($email) && !empty($goals) && !empty($bio)){ 
     $to = '[email protected]'; 
     $subject = 'Submission Form'; 
     $body = 'Brand Name: '.$brandname.'<br />Name: '.$firstname.' '.$lastname.'<br />Email: '.$email.'<br />About the Company:'.$bio; 
     $headers = 'From: '.$email; 

Nó chỉ hiển thị <br /> làm văn bản trong e-mail tôi nhận được. Nó cũng giống như khi tôi sử dụng \ n (mà tôi cho rằng đây thực sự là cách đúng để thực hiện). Tôi đang làm gì sai? Cảm ơn.

Trả lời

7

Bạn phải đặt \ n trong dấu ngoặc kép "không giữa dấu nháy đơn 'Nếu bạn muốn điều đó trình tự này sẽ được hiểu là một dòng mới (dòng nuôi 0x0A) nhân vật

Hãy xem tài liệu php này:

http://php.net/manual/en/language.types.string.php

1

Cách đơn giản nhất cho điều này

$newline = ' 
'; 

sử dụng biến $ xuống dòng bất cứ nơi nào bạn muốn (:

+3

Tùy thuộc vào nơi bạn nhập khóa nhập, bạn sẽ nhận được các kết quả khác nhau như Mac, Window và Linux xử lý các dòng mới với các kết hợp khác nhau của '\ r' và' \ n'. –

1

Từ manual page of the mail() function, chúng tôi biết rằng để gửi email HTML, bạn cần phải nói thêm tiêu đề bổ sung. Điều này được thể hiện chính xác trong Example #4.

Tuy nhiên, chỉ để ngắt dòng, tôi sẽ không khuyên bạn nên sử dụng HTML. Đối với điều đó, chỉ cần chèn "\ n" vào chuỗi, đảm bảo sử dụng dấu ngoặc kép, như đã đề cập bởi Abraham.

2

sử dụng "<br>" thay vì \n nó sẽ làm việc 100% phát hiện của tôi

ví dụ

$subject="Mail from customer ".$_POST['Name'].`"<br>"`; 

thưởng thức :)

2

(PHP 4, PHP 5)

$body = 'Brand Name: '.$brandname."\r\n".'Name: '.$firstname.' '.$lastname."\r\n".'Email: '.$email."\r\n".'About the Company:'.$bio; 

Sử dụng "\r\n" cho dòng mới như trên

+0

Tính năng này hoạt động. Cảm ơn – KarenAnne

0

Tôi không thể thêm nhận xét vào câu trả lời của Mohammad Saqib, nhưng tôi muốn nói rằng bạn không nên sử dụng <br> làm thay thế cho \r\n vì điều này có thể khiến email bị chặn bởi bộ lọc spam 'quá dài' . Các dòng mới quan trọng để giữ cho email trở nên con người hơn và cho phép phân phối thành công!

Phương pháp tôi khuyên bạn nên là:

$output[] = "line 1"; 
$output[] = "line 2"; 
$EmailBody = join("\r\n",$output); 

Ngoài ra bạn phải chắc chắn bạn khử trùng 'tiêu đề để tránh tiêm tiêu đề từ người dùng nhập vào, đây là một chức năng đó là đôi chắc chắn để ngăn chặn tiêm:

function sanitize(&$data){ 
    return str_ireplace(array("\r", "\n", "%0a", "%0d"), '', stripslashes($data)); 
} 


$headers = 'From: '.sanitize($email); 

Nếu bạn muốn thẻ HTML để hiển thị trong email, thay đổi kiểu sử dụng tiêu đề:

$headers = 'Content-type: text/html;\r\nFrom: '.sanitize($email); 

Nếu bạn đã hiển thị HTML, bạn nên xóa đầu vào của người dùng để tránh bất kỳ điều gì bất ngờ ... tức là HTML injection. Sử dụng chức năng này ở bất cứ đâu bạn hiển thị đầu vào của người dùng bằng HTML:

function htmlclean($str){ 
    return htmlentities($str, ENT_QUOTES); 
} 

ví dụ: $ body = "Tên thương hiệu:". htmlclean ($ brandname);

Các vấn đề liên quan