2013-08-23 65 views
6

Tôi nhận được dấu chấm than ở các vị trí ngẫu nhiên trong kết quả của hàm email PHP này. Tôi đọc rằng đó là bởi vì các dòng của tôi quá dài hoặc tôi phải mã hóa email trong Base64 nhưng tôi không biết làm thế nào để làm điều đó.Dấu chấm than Ngẫu nhiên trong Kết quả của HTML HTML-Email

Đây là những gì tôi có:

$to = "[email protected]"; 
$subject = "Pulling Hair Out"; 
$from = "[email protected]"; 
$headers = "From:" . $from; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$headers .= "Content-Transfer-Encoding: 64bit\r\n"; 

mail($to,$subject,$message,$headers); 

Làm thế nào để sửa lỗi này nên không ngẫu nhiên! Trong kết quả? Cảm ơn!

+0

Với nội dung email trống, bạn vẫn gặp sự cố này? –

+0

Bạn có thể thêm một ví dụ cho câu hỏi không? – andrewsi

+0

Câu hỏi này đã được hỏi và trả lời tại đây: http://stackoverflow.com/questions/7921111/exclamation-point-in-html-email?rq=1 – Lumberjack

Trả lời

8

Như đã trình bày ở đây: Exclamation Point in HTML Email

Vấn đề là chuỗi của bạn quá dài. Nạp một chuỗi HTML dài hơn 78 ký tự vào hàm thư, và bạn sẽ kết thúc bằng một! (bang) trong chuỗi của bạn.

Điều này là do giới hạn chiều dài dòng trong RFC2822 http://tools.ietf.org/html/rfc2822#section-2.1.1

+0

Tôi đã đọc câu hỏi này "Exclamation Point in HTML Email". Tôi không chắc chắn chính xác cách thực hiện điều này: "Độ phân giải là thay đổi nó thành base-64 mã hóa dữ liệu hoặc thêm \ r \ n trên các dòng mã html dài của tôi". – Tom

+3

@tomuky thử '$ base64_email_text = rtrim (chunk_split (base64_encode ($ email_text)));' Nguồn: http://www.brightlemon.com/blog/unexpected-exclamation-marks-while-using- phps-mail-function-0 – sampoh

1

Bạn nói đúng, đó là bởi vì email của bạn quá dài. Thử thay thế bằng dòng này trong tiêu đề thư của bạn.

Content-Transfer-Encoding: quoted-printable 
+0

Điều này không hoạt động. – Tom

+0

Bạn không chắc chắn nếu bạn đã tìm ra nhưng tôi đã bỏ qua đoạn mã này. Vì vậy, tiêu đề cùng với điều này sẽ khắc phục sự cố của bạn. '$ message = quoted_printable_encode ($ message)' http://php.net/manual/en/function.quoted-printable-encode.php – FatBat

+0

Tôi tức giận với rất nhiều câu trả lời ở trên và một vài công việc xung quanh của riêng tôi, nhưng đây chắc chắn là cách khắc phục dễ dàng nhất, nhanh nhất mà không có cú phản hồi trên đầu ra ... Đã thêm tiêu đề này: $ tiêu đề. = "Content-Transfer-Encoding: quoted-printable". "\ r \ n"; điều chỉnh chuỗi html của tôi: $ body = quoted_printable_encode ($ msgtosend); –

3

Cố gắng sử dụng đoạn mã này:

$to = "[email protected]"; 
$subject = "Pulling Hair Out"; 
$from = "[email protected]"; 
$headers = "From:" . $from; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$headers .= "Content-Transfer-Encoding: 64bit\r\n"; 

$finalMessage = wordwrap($message, 75, "\n"); 

mail($to,$subject,$finalMessage,$headers); 

Vấn đề là một dòng không nên dài hơn 998 ký tự. (xem thêm https://stackoverflow.com/a/12840338/2136148)

2

Câu trả lời ở đây có thông tin chính xác về độ dài dòng, tuy nhiên không có câu nào cung cấp cho tôi đoạn mã đủ để khắc phục sự cố. Tôi nhìn quanh và tìm ra cách tốt nhất để làm điều này, ở đây là;

<?php 
// send base64 encoded email to allow large strings that will not get broken up 
// ============================================== 
$eol = "\r\n"; 
// a random hash will be necessary to send mixed content 
$separator = md5(time()); 

$headers = "MIME-Version: 1.0".$eol; 
$headers .= "From: Me <[email protected]>".$eol; 
$headers .= "Content-Type: multipart/alternative; boundary=\"$separator\"".$eol; 
$headers .= "--$separator".$eol; 
$headers .= "Content-Type: text/html; charset=utf-8".$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol.$eol; 

// message body 
$body = rtrim(chunk_split(base64_encode($html))); 

mail($email, $subject, $body, $headers); 
// ============================================== 
+0

Mã hầu như hoạt động. Nó có lỗi. Dòng '$ headers. =" Content-Transfer-Encoding: base64 ". $ Eol. $ Eol;' sai, nó phải là '$ headers. =" Content-Transfer-Encoding: base64 ".$ eol' và nó sẽ hoạt động tốt – OfficeYA

+0

Bạn chỉ cần xóa '$ eol' thứ hai trong ví dụ của mình? – Novocaine

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