Php Zend_Mail中的UTF-8发件人名称?

Php Zend_Mail中的UTF-8发件人名称?,php,zend-framework,utf-8,zend-mail,Php,Zend Framework,Utf 8,Zend Mail,我正在使用Zend_Mail,希望自定义发件人名称 我希望发件人名称为FooBar爱你Ryan(其中“Ryan”替换为收件人姓名和爱你 替换为收件人语言中“loves”的翻译() 我试过,还有其他类似的事情: mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); iconv_set_encoding("input_encoding", 'UTF-8'); iconv_set_encoding("output_encoding", 'UTF

我正在使用Zend_Mail,希望自定义发件人名称

我希望发件人名称为FooBar爱你Ryan(其中“Ryan”替换为收件人姓名和爱你 替换为收件人语言中“loves”的翻译()

我试过,还有其他类似的事情:

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
iconv_set_encoding("input_encoding", 'UTF-8');
iconv_set_encoding("output_encoding", 'UTF-8');
iconv_set_encoding("internal_encoding", 'UTF-8'); 
header('Content-Type:text/html; charset=' . 'UTF-8');
它作为发送方生成:
”=?UTF-8?B?RXH0CMFIDXJNILLHKVABY3DHBHNOQGV4DHYNV4LMNVBQ==?=”

然后在我的Gmail中显示为
(未知发件人)


有什么想法吗?

我希望我早一点尝试过:当我硬编码中文字符串作为发送者名称(使用utf8字符)时,效果很好。(我只在Gmail上测试过。)

所以我走的路错了


我需要弄清楚,为什么由utf8字符组成的动态生成的发送者名称不能工作,而硬编码的中文字符串却不能工作。但这似乎是一个不同的问题。

对我来说,唯一有效的解决方案是: 正如您在通常的php sendmail中设置utf8主题一样,您可以创建一个utf8注释的base64字符串,如下所示:

$mail->addFrom($fromEmail, '=?utf-8?B?'.base64_encode($fromName).'?=');

有了这个解决方案,每件事都很有魅力。

这是一个很好的问题,答案也很好——但ZendFramework先进,引用的接口不幸过时了

因此,这里是相同的解决方案,但从2017年6月起测试工作正常:

private static function ecvt($string)
{
    return mb_convert_encoding($string, 'ISO-2022-JP', 'UTF-8');
}
private static function hcvt($string)
{
    return "=?iso-2022-jp?B?" . base64_encode( self::ecvt($string) ) . "?=";
}
private function sendMail( )
{
    $mail = new Message();

    $content = 'Message body 日本語も';

    $mail->getHeaders()->addHeaderLine('Content-Type', 'text/plain; charset=ISO-2022-JP');

    $mail->setFrom('sender@acme.com', self::hcvt('Sender 日本語も') );
    $mail->addTo('receiver@acme.com', self::hcvt('Receiver 日本語も') );
    $mail->setSubject(self::hcvt('Some subject 日本語も'));

    $mail->setBody( self::ecvt($content) );
    $mail->setEncoding('ISO-2022-JP');

    // this is critical - it works around a bug in zendframework3 where
    // MIME encoding is botched in headers. By switching headers to ASCII,
    // I basically do the encoding myself.
    $mail->getHeaders()->setEncoding('ASCII');

    $this->mailTransport->send( $mail );
}

所有这一切的基础都在这里——读起来很好,这样你就知道发生了什么:RFC2047

你能发布实际设置
发件人的代码吗:
email header字段?$sendername='=?UTF-8?B?'。base64_encode($sendername)。';最近我一直在尝试:
$senderName=“=?UTF-8?B?”。base64_编码($email->getFromName())。"?=";         $邮件->clearFrom()$mail->setFrom($email->getFrom(),$senderName)
这恰好也是Arda的建议。
$recipientCleaned=str_replace('@',$translator->translate('at'),$recipient)使它工作。