PHPMailer वर्ण एन्कोडिंग समस्याएँ


189

मैं पंजीकरण, सक्रियण भेजने के लिए PHPMailer का उपयोग करने का प्रयास करता हूं। उपयोगकर्ताओं को मेल आदि:

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "name@mydomain.org";
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("mytest@gmail.com");
$mail->AddBCC('mytest2@mydomain.org', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}

$messageलैटिन वर्ण हैं। दुर्भाग्य से सभी वेबमेल (gmail, webmail.mydomain.org, emailaddress.domain.xx) एक अलग कोडिंग का उपयोग कर रहे हैं।

मैं अपने मेल को बिल्कुल सभी मेलबॉक्सों पर समान दिखाने के लिए UTF-8 कोडिंग का उपयोग करने के लिए कैसे बाध्य कर सकता हूं?

मैंने मेल हेडर की चौड़ाई को बदलने की कोशिश की mb_convert_encoding(), लेकिन भाग्य के बिना।


ऊपर के चारसेट के पूंजीकरण को बोवेंडर द्वारा बदल दिया गया था।
गोगोविट्च

जवाबों:


473

यदि आप 100% सुनिश्चित हैं कि $ संदेश में ISO-8859-1 है तो आप utf8_encode का उपयोग कर सकते हैं जैसा कि डेविड कहते हैं। अन्यथा $ संदेश पर mb_detect_encoding और mb_convert_encoding का उपयोग करें ।

यह भी ध्यान रखें कि

$mail -> charSet = "UTF-8"; 

द्वारा प्रतिस्थापित किया जाना चाहिए:

$mail->CharSet = 'UTF-8';

और रखा के बाद वर्ग (के बाद की इन्स्टेन्शियशन new)। गुण संवेदनशील हैं! PHPMailer डॉक्टर देखें सूची और सटीक वर्तनी फ़ॉट।

इसके अलावा PHPMailer की डिफ़ॉल्ट एन्कोडिंग 8bitUTF-8 डेटा के साथ समस्याग्रस्त हो सकती है। इसे ठीक करने के लिए आप यह कर सकते हैं:

$mail->Encoding = 'base64';

ध्यान दें कि 'quoted-printable'शायद इन मामलों में भी काम करेगा (और शायद भी 'binary')। अधिक जानकारी के लिए आप RFC1341 - कंटेंट-ट्रांसफर-एनकोडिंग हैडर फील्ड पढ़ सकते हैं ।


35
मुझे नहीं पता कि किसी को भी परवाह है क्योंकि यह पागल पुराना है लेकिन, मुझे इसके लिए काम करने के लिए $ mail-> एनकोडिंग = "base64"
जोड़ना होगा

5
@AndrewRevak आपने दिन बचा लिया! :)
कार्ला

3
@AndrewRevak बढ़िया सामान! यही वह बात है जिसने इसे हल किया।
बर्नार्डा

Mb_detect_encoding और mb_convert_encoding का उपयोग अच्छा रहा होगा।
ब्लू जे

26
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

लाइन के $mail -> CharSet = "UTF-8";बाद $mail = new PHPMailer();और कोई रिक्त स्थान के साथ होना चाहिए !

इसे इस्तेमाल करे

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";

5
मैंने बेहतर पढ़ने के लिए इस पोस्ट को अपडेट किया, लेकिन 2 साल पहले ही ऑप्स के सवाल का जवाब दे दिया गया था! और उस स्वीकृत उत्तरदाता में यह पहले से ही शामिल था।
द्विज २५'१५ को १६

5

पार्टी में देर से आने के लिए क्षमा करें। आपके सर्वर कॉन्फ़िगरेशन के आधार पर, आपको लोअरकेस अक्षरों utf-8 के साथ कड़ाई से वर्ण निर्दिष्ट करने की आवश्यकता हो सकती है , अन्यथा इसे अनदेखा किया जाएगा। यदि आप इसका समाधान यहां खोजते हैं तो प्रयास करें और ऊपर दिए गए उत्तर में से कोई भी मदद नहीं करता है:

$mail->CharSet = "UTF-8";

के साथ प्रतिस्थापित किया जाना चाहिए:

$mail->CharSet = "utf-8";

5

मैं खुद इस तरह काम करता हूं

  $mail->FromName = utf8_decode($_POST['name']);

http://php.net/manual/en/function.utf8-decode.php


मेरे पास कोई पोस्ट नहीं है, बस एक नियमित फ्रेंच स्ट्रिंग एक utf-8 एन्कोडेड फ़ाइल में लिखा है, और यह एक आकर्षण की तरह काम किया, धन्यवाद!
टोनि 07


3

मुझे मिल रहा था & oacute; $ मेल में-> विषय / डब्ल्यू PHPMailer।

तो मेरे लिए पूरा समाधान है:

// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';

$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);

आशा करता हूँ की ये काम करेगा।


1

जब उपरोक्त में से कोई भी काम नहीं करता है, और अभी भी मेल जैसा दिखता है ª הודפסה ×•× ×©×œ:

$mail->addCustomHeader('Content-Type', 'text/plain;charset=utf-8');
$mail->Subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';;

0

@ $mail -> charSet = "UTF-8";

--- यह लाइन अंडर होनी चाहिए

$mail = new PHPMailer(); line.

पीएफएफ ..


हाँ यह सही है। आपको ऑब्जेक्ट इंस्टेंटेशन के बाद इसे रखना होगा।


यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका स्पष्टीकरण देने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी करने में सक्षम होंगे ।
piet.t

यह इस मुद्दे के लिए आलोचना या स्पष्टीकरण का अनुरोध नहीं है। सही उत्तर है: $ मेल = नया PHPMailer (); $ मेल-> चारसेट = 'यूटीएफ -8';
निकोस कपेटानकोस

Zo me यह होलियन के उत्तर पर एक टिप्पणी की तरह दिखता है क्योंकि यह इसमें कुछ भी नहीं जोड़ता है।
piet.t

यदि आप charSet संपत्ति का उपयोग करते हैं तो काम नहीं करेगा। सही एक चारसेट है। मामला अलग बनाता है।
निकोस कपेटानाकोस

अच्छा, फिर आप सही जवाब देने के बजाय गलत जवाब क्यों देते हैं? लेकिन वह पहले से ही वहाँ है, तो आपको क्या जोड़ना है?
piet.t

0

सबसे सरल तरीका और आपकी सहायता करेगा सेटसेट को UTF-8 में सेट करना

$mail->CharSet = "UTF-8"

@NickZuber संपादन के कारण सटीक रेखा है। यह मूल प्रश्न में सटीक नहीं था ...
श्री Tsjolder

0

वर्ग PHPMailer का उपयोग करके ईमेल भेजने में चरित्र एन्कोडिंग की समस्याओं से बचने के लिए, हम इसे "चारसेट" पैरामीटर का उपयोग करके UTF-8 वर्ण एन्कोडिंग के साथ भेजने के लिए कॉन्फ़िगर कर सकते हैं, जैसा कि हम निम्नलिखित पीएचपी कोड में देख सकते हैं:

$mail = new PHPMailer();
$mail->From = 'midireccion@email.com';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('emaildestino@email.com');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);


// Active condition utf-8
$mail->CharSet = 'UTF-8';


// Send mail
$mail->Send();

-5

$ मेल -> चारसेट = "यूटीएफ -8"; --- यह लाइन $ मेल = नई PHPMailer () के तहत होनी चाहिए; लाइन।

पीएफएफ ..

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.