2011-09-01 31 views
58

जब मैं ईमेल भेजता हूं, तो ईमेल अंग्रेजी के अलावा अन्य वर्ण नहीं दिखाता है। यह नीचे की तरह दिखाता है:यूटीएफ -8 ईमेल कैसे भेजें?

आधा ™ ç "ya» ä »

वास्तव में जान सकता हूँ कि इसका क्या कारण? यहां तक ​​कि मैंने स्क्रिप्ट में सामग्री-प्रकार और वर्णमाला को जोड़ने का प्रयास किया, फिर भी यह वही दिखाता है।

मैं Mail::Factory("mail");

+2

आप क्या उपयोग करते हैं? मूल 'मेल ')' या' ज़ेंड_Mail' या 'PHPMailer'? फैक्टरी विधि के कुछ कोड की आवश्यकता है! –

+2

आपको अतिरिक्त रूप से गंतव्य ईमेल क्लाइंट का ख्याल रखना होगा। भले ही आपको यह पता चलता है कि यह आपके ईमेल क्लाइंट में सही ढंग से ईमेल देखने में कामयाब रहा है, इसका मतलब यह नहीं है कि आपका ग्राहक मेल को सही तरीके से देखेगा। अंत में मैं हमेशा यूटीएफ -8 वर्णसेट हेडर के साथ एचटीएमएल-ईमेल बनाता हूं। इस तरह अधिकांश ईमेल-क्लाइंट सामग्री को सही तरीके से प्रदर्शित करते हैं। – Marco

+0

@FlyBy: हाँ, वही है जो मैं करना चाहता हूं, सामग्री को utf-8 charset के साथ प्रदर्शित करें, लेकिन मैं अभी भी ईमेल को सही तरीके से नहीं देख सकता। – deepWebMie

उत्तर

83

इस्तेमाल किया हेडर जोड़ सकते हैं "सामग्री प्रकार: text/html; charset = UTF-8" अपने संदेश के मुख्य भाग है।

$headers = "Content-Type: text/html; charset=UTF-8"; 

आप देशी mail() समारोह $ हेडर सरणी का उपयोग करते हैं 4 पैरामीटर हो जाएगा mail($to, $subject, $message, $headers)

यदि आप उपयोगकर्ता नाशपाती मेल :: कारखाना() कोड होगा:

$smtp = Mail::factory('smtp', $params); 

$mail = $smtp->send($to, $headers, $body); 
+0

यहाँ मेरी कोड $ मेल = मेल :: कारखाना ("मेल") है; $ से = "[email protected]"; $ body = "好 信"; $ हेडर = सरणी ("सामग्री-प्रकार =>" टेक्स्ट/सादा: वर्णसेट = \ "यूटीएफ -8", "से" => "[email protected]", "to" => "[email protected] "," विषय "=>" टेस्ट चीनी मेल भेजें- 好 信 "); $ मेल-> भेजें ($, $ हेडर, $ बॉडी) क्या यह सही है? यह दिखाता है कि मैं क्या उम्मीद करता हूं। इसे शरीर, हेडर या यहां तक ​​कि विषय में चीनी शब्द प्रदर्शित करना चाहिए। – deepWebMie

+0

यूटीएफ -8 को 8 बिट्स की आवश्यकता है। अधिकांश ईमेल टूल अभी भी उपयोग करते हैं: सामग्री-स्थानांतरण-एन्कोडिंग: 7 बिट। परिणाम उपकरण अपनी सामग्री के माध्यम से चला जाता है पर निर्भर हो जाएगा लेकिन सामग्री-स्थानांतरण-एन्कोडिंग के शीर्ष लेख सरणी के लिए कोई प्रविष्टि जोड़ने का प्रयास करें: 8bit – ClearCrescendo

+1

किस ईमेल उपकरण stil 7 बिट स्थानांतरण एन्कोडिंग का उपयोग करें? – Grodriguez

25

मैं मैं निर्दिष्ट वर्णसेट (आईएसओ -885 9 -2) का उपयोग कर रहा हूं क्योंकि प्रत्येक मेल सिस्टम नहीं (उदाहरण के लिए: http://10minutemail.com) यूटीएफ -8 मेल पढ़ सकते हैं। यदि आपको इसकी आवश्यकता है:

function utf8_to_latin2($str) 
{ 
    return iconv ('utf-8', 'ISO-8859-2' , $str); 
} 
function my_mail($to,$s,$text,$form, $reply) 
    { 
     mail($to,utf8_to_latin2($s),utf8_to_latin2($text), 
     "From: $form\r\n". 
     "Reply-To: $reply\r\n". 
     "X-Mailer: PHP/" . phpversion()); 
    } 

मैंने एक और मेलर फ़ंक्शन बनाया है, क्योंकि सेब डिवाइस पिछले संस्करण को अच्छी तरह से पढ़ नहीं पाया।

function utf8mail($to,$s,$body,$from_name="x",$from_a = "[email protected]", $reply="[email protected]") 
{ 
    $s= "=?utf-8?b?".base64_encode($s)."?="; 
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n"; 
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n"; 
    $headers.= "Reply-To: $reply\r\n"; 
    $headers.= "X-Mailer: PHP/" . phpversion(); 
    mail($to, $s, $body, $headers); 
} 
+0

यह काम करता है! धन्यवाद दोस्त। – MilanG

+2

और यदि आप सामग्री भेजने की कोशिश कर रहे हैं जिसे आईएसओ -885 9 -2 में प्रदर्शित नहीं किया जा सकता है ?! – deceze

+4

'$ शीर्षलेख। =" से: =? Utf-8? B? "। Base64_encode ($_name)।"? = <".$from_a."> \ r \ n "; 'इस पंक्ति ने मेरी समस्या हल की, धन्यवाद! – Julia

संबंधित मुद्दे