2012-10-08 30 views
11

Tôi đang cố gắng gửi email bằng cả văn bản và html, nhưng tôi không thể gửi đúng tiêu đề phù hợp. Đặc biệt, tôi muốn đặt tiêu đề Kiểu nội dung, nhưng tôi không thể tìm cách đặt tiêu đề riêng cho phần html và văn bản.Thư Lê, cách gửi văn bản thuần/văn bản + html trong UTF-8

Đây là mã của tôi:

$headers = array(
    'From'   => '[email protected]', 
    'Return-Path' => '[email protected]', 
    'Subject'  => 'mysubject', 
    'text_encoding' => '7bit', 
    'text_charset' => 'UTF-8', 
    'html_charset' => 'UTF-8', 
    'head_charset' => 'UTF-8', 
    'Content-Type' => 'text/html; charset=UTF-8' 
); 

$mime = new Mail_mime(); 

$html = '<html><body><b>my body</b></body></html>'; 
$text = 'my body'; 

$mime->setTXTBody($text); 
$mime->setHTMLBody($html); 

$body = $mime->get(); 
$headers = $mime->headers($headers); 
$mail_object =& Mail::factory('smtp', $GLOBALS['pear_mail_config']); 
$mail_object->send('[email protected]', $headers, $body); 

Đó là email tôi nhận được:

From: [email protected] 
Subject: mysubject 
text_encoding: 7bit 
text_charset: UTF-8 
html_charset: UTF-8 
head_charset: UTF-8 
Content-Type: multipart/alternative; 
    boundary="=_7adf2d854b1ad792c802a9db31084520" 
Message-Id: <.....cut.....> 
Date: Mon, 8 Oct 2012 15:40:54 +0200 (CEST) 
To: undisclosed-recipients:; 

--=_7adf2d854b1ad792c802a9db31084520 
Content-Transfer-Encoding: 7bit 
Content-Type: text/plain; charset="ISO-8859-1" 

my body 

--=_7adf2d854b1ad792c802a9db31084520 
Content-Transfer-Encoding: quoted-printable 
Content-Type: text/html; charset="ISO-8859-1" 

<html><body><b>my body</b></body></html> 
--=_7adf2d854b1ad792c802a9db31084520-- 

Dường như Content-Type tiêu đề tôi đặt là hoàn toàn bị bỏ qua. Tôi đã mong đợi một số hàmHTMLHeaders và setTXTHeaders, nhưng có vẻ như không có gì giống như thế này. Tui bỏ lỡ điều gì vậy? Làm cách nào để tôi có thể đặt cả hai tiêu đề Loại Nội dung thành UTF-8?

Trả lời

31

Tôi phát hiện ra rằng các tiêu đề được cho là viết khác nhau. Đặc biệt, một số trong số đó là các tham số cho đối tượng mime và không phải là tiêu đề email. Sau đó mảng mime_params sẽ được chuyển tới hàm get().

Đây là cách chính xác để thiết lập các tiêu đề:

$headers = array(
    'From'   => '[email protected]', 
    'Return-Path' => '[email protected]', 
    'Subject'  => 'mysubject', 
    'Content-Type' => 'text/html; charset=UTF-8' 
); 

$mime_params = array(
    'text_encoding' => '7bit', 
    'text_charset' => 'UTF-8', 
    'html_charset' => 'UTF-8', 
    'head_charset' => 'UTF-8' 
); 

$mime = new Mail_mime(); 

$html = '<html><body><b>my body</b></body></html>'; 
$text = 'my body'; 

$mime->setTXTBody($text); 
$mime->setHTMLBody($html); 

$body = $mime->get($mime_params); 
$headers = $mime->headers($headers); 
$mail_object =& Mail::factory('smtp', $GLOBALS['pear_mail_config']); 
$mail_object->send('[email protected]', $headers, $body); 
+0

Hãy nhớ thêm 'require_once 'Mail/mime.php'; '. – Knu

+1

Cuối cùng, một câu trả lời ... –

+1

chắc chắn loại mã hóa sẽ được chuyển qua Mime-> get(). bỏ phiếu. –

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