我将通过PHP网站发送邮件。客户端可以自定义邮件主题,我将以UTF-8获取发布数据。但是当我使用PHP mail()发送HTML电子邮件时, 我发现这个主题并没有正确显示,但身体确实如此。
如何在PHP邮件功能中发送中文单词?
感谢。
答案 0 :(得分:4)
您需要根据指定 encoded-word 的方式对主题进行编码(请参阅RFC 2047):
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
您可以使用
Base64编码(base64_encode
):
'Subject: =?UTF-8?B?'.base64_encode($subject).'?='
或
quoted-printable 编码(请参阅RFC 2045,imap_8bit
):
'Subject: =?UTF-8?Q?'.imap_8bit($subject).'?='
答案 1 :(得分:0)
在邮件标题中发送非ASCII非常复杂。查看PHPMailer,
http://sourceforge.net/projects/phpmailer/
如果它不起作用,请查看encoderHeader()以了解它是如何完成的。
答案 2 :(得分:0)
我使用PEAR Mail_Mime和mb_encode_mimeheader对主题进行编码。这是一个工作函数示例:
<?php
function mail_html($from, $to, $subject, $message_html, $headers = array()) {
require_once "Mail.php";
require_once 'Mail/mime.php';
$smtp = Mail::factory('smtp',
array (
'host' => 'smtp.example.com',
'auth' => true,
'username' => 'user@example.com',
'password' => 'password'));
if(function_exists('mb_internal_encoding'))
mb_internal_encoding('UTF-8');
if(function_exists('mb_encode_mimeheader'))
$subject = mb_encode_mimeheader($subject,"UTF-8", "B", "\n");
$h = array();
$h['From'] = "$from";
$h['Bounce'] = "$from";
$h['Reply-To'] = "$from";
$h['Return-Path'] = "$from";
$headers['Subject'] = $subject;
$headers = array_merge($h, $headers);
$mime = new Mail_mime();
$mime->setHTMLBody($message_html);
$body = $mime->get(array('html_charset' => 'UTF-8', 'html_encoding' => '8bit', 'head_charset'=> 'UTF-8'));
$hdrs = $mime->headers($headers);
$mail = $smtp->send($to, $hdrs, $body);
if (PEAR::isError($mail))
echo 'error', 'Unable to send email';
else
echo "Sent email to $to from $from";
}
?>