UTF-8 ईमेल कैसे भेजें?


83

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

आधा ™ ç "ya» ä »

हो सकता है वास्तव में इसका कारण क्या हो? यहां तक ​​कि मैंने स्क्रिप्ट में कंटेंट-टाइप और चारसेट को जोड़ने की कोशिश की, यह अब भी वही दिखा रहा है।

मैंनें इस्तेमाल किया Mail::Factory("mail");


2
तुम क्या इस्तेमाल करते हो? देशी mail()या Zend_Mailया PHPMailer? फैक्टरी विधि के कुछ कोड की आवश्यकता है!
वेसली वैन ओपडॉर्प

2
इसके अलावा आपको गंतव्य ईमेल क्लाइंट का भी ध्यान रखना होगा। यहां तक ​​कि अगर आप इसे प्राप्त करने में कामयाब होते हैं, तो ईमेल को आपके ईमेल क्लाइंट में सही तरीके से देखने का मतलब यह नहीं है कि आपका ग्राहक मेल को सही देखेगा। अंत में मैं हमेशा utf-8 charset हैडर के साथ html-email का निर्माण करता हूं। इस तरह से अधिकांश ईमेल-क्लाइंट सामग्री को सही ढंग से प्रदर्शित करते हैं।
मार्को

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

सामग्री-प्रकार और चारसेट ठीक वही हैं जो आपको इस काम को बनाने के लिए चाहिए, लेकिन आपको हमें अधिक जानकारी देने की आवश्यकता है। क्या आप हमें कोड दिखा सकते हैं। और / या परिणामी संदेश का स्रोत? क्या आप सुनिश्चित हैं कि आपका डेटा सही ढंग से utf8 एन्कोडेड है?
ट्रिपल

3
यहाँ मेरा उदाहरण कोड है: $mail = Mail::factory("mail"); $to = "me@abc.com"; $body = "好信"; $headers = array("Content-type =>"text/plain: charset=\"UTF-8","From" => "abc@abc.com","To" => "me@abc.com","Subject" => "Test Send Chinese mail-好信"); $mail->send($to, $headers, $body); क्या यह सही है? यह नहीं दिखाता कि मैं क्या उम्मीद करता हूं। यह शरीर, शीर्ष लेख या यहां तक ​​कि विषय में चीनी शब्द प्रदर्शित करना चाहिए।
deepWebMie

जवाबों:


116

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

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

यदि आप मूल mail()फ़ंक्शन का उपयोग करते हैं $ हेडर सरणी 4 वें पैरामीटर होगा mail($to, $subject, $message, $headers)

यदि आप PEAR मेल :: फ़ैक्टरी () कोड का उपयोग करते हैं:

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

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

यहाँ मेरा कोड $ मेल = मेल :: कारखाना ("मेल") है; $ = = "me@abc.com"; $ शरीर = "body 好"; INR , "विषय" => "टेस्ट भेजें चीनी मेल- 信)"); $ मेल-> भेजें ($, $ हेडर, $ बॉडी) क्या यह सही है? यह नहीं दिखाता कि मैं क्या उम्मीद करता हूं। यह शरीर, शीर्ष लेख या यहां तक ​​कि विषय में चीनी शब्द प्रदर्शित करना चाहिए।
deepWebMie

1
7-बिट ट्रांसफर एन्कोडिंग का उपयोग करने वाले कौन से ईमेल टूल स्टिल हैं?
ग्रोग्रिगुएज़

3
पीएचपी करने के लिए 4 के पैरामीटर mail()एक स्ट्रिंग है, एक सरणी नहीं !!
व्लादिमीर पैंटेलेव

2
charset=UTF-8आसपास के उद्धरण के बिना लिखना सुनिश्चित करें UTF-8!
मेल ५२

4
text/htmlयदि आप HTML प्रारूप में एक ईमेल भेज रहे हैं तो केवल उपयोग करें । सादे पाठ ईमेल के लिए, आप चाहते हैं text/plain
स्टीवर्ट

34

मैं निर्दिष्ट चारसेट (ISO-8859-2) का उपयोग कर रहा हूं क्योंकि प्रत्येक मेल सिस्टम नहीं है (उदाहरण के लिए: http://10minutemail.com ) UTF-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 = "info@x.com", $reply="info@x.com")
{
    $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);
}

2
और क्या होगा अगर आप उस सामग्री को भेजने की कोशिश कर रहे हैं जिसे ISO-8859-2 में प्रस्तुत नहीं किया जा सकता है ?!
deceze

4
$headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";इस लाइन ने मेरी समस्या हल कर दी, धन्यवाद!
जूलिया

2
सादे पाठ मेलर्स में पठनीयता के लिए उद्धृत मुद्रण योग्य एन्कोडिंग पर विचार करें, यह उतना ही सरल है:'=?utf-8?Q?' . quoted_printable_encode($string) . '?='
एडी एडी

@ जूलिया थैंक्स, मेरी भी।
fdrv

cc और bcc के बारे में क्या?
तोस्कान

1

यदि नहीं HTML, तो UTF-8अनुशंसित नहीं है। koi8-rऔर windows-1251केवल समस्याओं के बिना। इसलिए html मेल का उपयोग करें।

$headers['Content-Type']='text/html; charset=UTF-8';
$body='<html><head><meta charset="UTF-8"><title>ESP Notufy - ESP Сообщения</title></head><body>'.$text.'</body></html>';


$mail_object=& Mail::factory('smtp',
    array ('host' => $host,
        'auth' => true,
        'username' => $username,
        'password' => $password));
$mail_object->send($recipents, $headers, $body);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.