2012-12-21 18 views
5

मैं ज़ेंड_Mail का उपयोग कर रहा हूं और प्रेषक नाम को कस्टमाइज़ करना चाहता हूं।ज़ेंड_Mail में यूटीएफ -8 प्रेषक का नाम?

मैं प्रेषक का नाम FooBar 爱 होना चाहता हूँ रयान 你 (जहां 'रयान' प्राप्तकर्ता नाम से बदल दिया जाता है और 爱 你 प्राप्तकर्ता, just like CD Baby does की भाषा में 'प्यार करता है' के लिए अनुवाद के साथ बदल जाता है)। फिर उस (unknown sender) के रूप में मेरे Gmail में दिखाई देने '=?UTF-8?B?RXh0cmFidXjniLHkvaByY3dhbHNoQGV4dHJhYnV4LmNvbQ==?= <[email protected]>'

और:

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

यह इस रूप में इस उत्पन्न करता है:

मैं base64_encode और mb_encode_mimeheader() और की तरह अन्य बातों की कोशिश की है।

कोई विचार?

+1

क्या आप वह कोड पोस्ट कर सकते हैं जो वास्तव में 'प्रेषक' ईमेल हेडर फ़ील्ड सेट करता है? – Asaph

+0

$ sendername = '=? यूटीएफ -8? बी?'। बेस 64_नकोड ($ sendername)। '? ='; –

+0

हाल ही में मैं यह कोशिश कर रहा हूं: '$ senderName =" =? यूटीएफ -8? बी? " । base64_encode ($ ईमेल-> getFromName())। "? ="; $ मेल-> clearFrom(); $ मेल-> सेट से ($ ईमेल-> getFrom(), $ senderName); 'अरडा ने जो भी सुझाव दिया वह होता है। – Ryan

उत्तर

1

मेरी इच्छा है कि मैंने पहले यह कोशिश की थी: जब मैं चीनी स्ट्रिंग को प्रेषक नाम (utf8 अक्षरों का उपयोग करके) के रूप में हार्ड कोड करता हूं, तो यह ठीक काम करता है। (मैंने केवल जीमेल में परीक्षण किया।)

तो जिस मार्ग पर मैं जा रहा था वह गलत था।

मुझे यह पता लगाने की आवश्यकता है कि एक हार्ड-कोडित चीनी स्ट्रिंग करते समय utf8 वर्णों वाला एक गतिशील रूप से जेनरेट किया गया प्रेषक नाम क्यों काम नहीं करता है। लेकिन यह एक अलग सवाल प्रतीत होता है।

+0

'$ प्राप्तकर्ता क्लेनड = str_replace ('@', $ अनुवादक-> अनुवाद ('पर'), $ प्राप्तकर्ता); 'इसे काम किया। – Ryan

2

मुझे एकमात्र समाधान काम के लिए था निम्नलिखित:

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

इस समाधान के साथ: आप एक सामान्य php sendmail मामले में UTF8 विषय सेट करेंगे के रूप में, आप एक UTF8 इस तरह base64 स्ट्रिंग विख्यात बना सकते हैं हर चीज एक आकर्षण की तरह काम किया।

0

यह एक अच्छा सवाल है और उत्तर अच्छे हैं - लेकिन ज़ेंडफ्रेमवर्क उन्नत और इंटरफ़ेस संदर्भित दुर्भाग्य से अप्रचलित हो गए।

तो यहाँ एक ही समाधान है, लेकिन/2017 जून के रूप में ठीक काम करने के लिए परीक्षण किया:

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('[email protected]', self::hcvt('Sender 日本語も')); 
    $mail->addTo('[email protected]', 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); 
} 

इस सब के लिए आधार वास्तव में यहाँ है - यह आप जानते हैं कि क्या चल रहा है तो पढ़ने के लिए अच्छा है : आरएफसी 2047 https://www.ietf.org/rfc/rfc2047.txt