2012-10-08 6 views
11

Próbuję wysłać wiadomość e-mail zarówno w tekście, jak i html, ale nie mogę poprawnie wysłać odpowiednich nagłówków. W szczególności chciałbym ustawić nagłówek Content-Type, ale nie mogę znaleźć sposobu ustawienia go oddzielnie dla html i części tekstowych.Poczta gruszka, jak wysłać zwykły tekst/tekst/html w UTF-8

To jest mój kod:

$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); 

To email uzyskać:

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-- 

Wydaje się, że nagłówek Content-Type I położony jest całkowicie ignorowany. Spodziewałbym się setHTMLHeaders i setTXtheaders, ale wygląda na to, że nic takiego nie ma. Czy czegoś brakuje? Jak mogę ustawić oba nagłówki Content-Type na UTF-8?

Odpowiedz

31

Odkryłem, że nagłówki mają być napisane inaczej. W szczególności niektóre z nich są parametrami obiektu mime, a nie nagłówkami wiadomości e-mail. Następnie tablica mime_params powinna zostać przekazana do funkcji get().

Jest to poprawny sposób ustawić nagłówki:

$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

Pamiętaj, aby dodać 'require_once 'poczta/mime.php';'. – Knu

+1

Na koniec odpowiedź ... –

+1

zdecydowanie typ kodowania powinien być przekazywany przez Mime-> get(). do głosowania. –