2012-08-15 13 views
5

मेल विषय में एन्कोड कैसे करें?मेल विषय में एन्कोड कैसे करें?

अब मैं अंत में कुछ पाया लेकिन यह अभी भी काम नहीं कर रहा:

use MIME::Words qw/encode_mimewords/; 
$recipientsubject = encode_mimewords('Votre fichier a bien été envoyé'); 

लेकिन (bugged) परिणाम है:

विषय:? Votre एक बिएन fichier = ISO-8859-1? क्यू = E9t = E9 = = ISO-8859-1 क्यू दूत = E9 =

कौन सा प्रदर्शित?????

Votre एक बिएन fichier

étéenvoyé (यह कुछ रिक्त स्थान खाती है)

+1

आपको संस्करण MIME :: शब्द अपडेट करें। यह है [एमआईएम में बग # 5462: टूल्स] (https://rt.cpan.org/Public/Bug/Display.html?id=5462), जिसे 2013 के आरंभ में एमआईएमई :: टूल्स 5.504 में तय किया गया है। – Palec

उत्तर

16

उपयोग Encode, यह एक कोर मॉड्यूल है।

perl -Mutf8 -MEncode -E 'say encode("MIME-Header", "Votre fichier a bien été envoyé")' 

... इच्छा उत्पादन या तो एक की:

=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?= 
=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?= 

और डिकोड साथ:

perl -C -MEncode -E 'say decode("MIME-Header", "=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?=")' 
perl -C -MEncode -E 'say decode("MIME-Header", "=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?=")' 

प्रिंट होगा कौन सा:

Votre fichier a bien été envoyé 

आप अभी भी एक ही परिणाम है, तो , आपको अधिक जानकारी देना चाहिए आपका पर्ल पर्यावरण। संस्करण एक अच्छा स्टार्टर है।

+4

पेडेंटिक नोट: 'डीकोड 'के साथ जब तक इसके विपरीत कोई विशिष्ट कारण नहीं है, तो' MIME-Header' का उपयोग करना सबसे अच्छा है, क्योंकि यह एमआईएमई क्यू और बी एन्कोडिंग दोनों को संभाल सकता है। [आरएफसी 2047] (http://www.ietf.org/rfc/rfc2047.txt) कहता है "एक मेल रीडर जो 'एन्कोडेड-शब्द' को पहचानने का दावा करता है, वह किसी भी चरित्र सेट के लिए या तो एन्कोडिंग स्वीकार करने में सक्षम होना चाहिए।" –

+1

ग्रेट, बहुत बहुत धन्यवाद! मैंने एनकोड का उपयोग किया और "एन्कोड" ("एमआईएमई-क्यू", "वोटर फ़िचियर ए बिएन एटे एनवाय") –

+0

असल में, एनकोड :: एमआईएम :: हेडर बग्गी है और मैंने बगट्रैकर में जो देखा उससे, लेखक अक्षम है। आरएफसी के वैध संदर्भों के साथ प्रस्तुत किए जाने पर भी उन्होंने बार-बार सही बग रिपोर्ट बंद कर दी। असल में, क्योंकि एनकोड :: एमआईएम :: हेडर कोर मॉड्यूल है, कई अन्य मॉड्यूल इस पर भरोसा करते हैं और इंटरनेट पर पर्ल स्क्रिप्ट टूटी हुई ईमेल भेजती है। – Palec

2

गैर-ASCII तारों के एमआईएम एन्कोडिंग को संभालने वाला एक और मॉड्यूल Email::MIME::RFC2047 है। उदाहरण

use strict; 
use warnings; 
use utf8; 

use Email::MIME::RFC2047::Encoder; 
use Email::MIME::RFC2047::Decoder; 

binmode(STDOUT, ':utf8'); 

my $encoder = Email::MIME::RFC2047::Encoder->new; 
my $encoded = $encoder->encode_text('Votre fichier a bien été envoyé'); 
print "$encoded\n"; 

my $decoder = Email::MIME::RFC2047::Decoder->new; 
my $decoded = $decoder->decode_text($encoded); 
print "$decoded\n"; 
लिए

प्रिंट

Votre fichier a bien =?utf-8?Q?=c3=a9t=c3=a9_envoy=c3=a9?= 
Votre fichier a bien été envoyé 

एनकोड से अधिक ईमेल :: माइम :: RFC2047 के कुछ लाभ:

  • यह संभव के रूप में कुछ शब्द के लिए MIME एन्कोडिंग का उपयोग करने के लिए कठिन कोशिश करता है, वाक्यांशों में उद्धृत तारों का उपयोग करके भी।
  • यह टू, से, या सीसी हेडर (एनकोड के साथ असंभव) में उपयोग किए गए एमआईएम वाक्यांशों के सही डिकोडिंग का समर्थन करता है।
  • यह यूटीएफ -8 की तुलना में अन्य चरित्र सेट का समर्थन करता है।
  • यह एमआईएमई-क्यू एन्कोडेड शब्दों में अंडरस्कोर के रूप में अंतरिक्ष को एन्कोड करता है।
  • इसमें एनकोड की तुलना में कम कीड़े हैं (कोई भी जिसे मैं जानता हूं)।

प्रकटीकरण: मैं मॉड्यूल का लेखक हूं।

+0

मॉड्यूल के विवरण में आप आरएफसी 822 के बारे में लिखते हैं। आरएफसी 2822 द्वारा अप्रचलित यह सबसे पुराना है, जो बदले में आरएफसी 5322 द्वारा अप्रचलित है। सबसे हालिया (2008 से) अच्छी तरह से समर्थित नहीं है, AFAIK, लेकिन आरएफसी 2822 (से 2001) आरएफसी 822 में टूटा हुआ कम से कम लाइन फोल्डिंग समर्थित है और ठीक करता है। क्या आपके पास 2822 से 822 पसंद करने का कोई कारण है? – Palec

+0

@Palec मुझे यह स्वीकार करना होगा कि मैं आरएफसी के बीच अंतर के बारे में बहुत अनजान हूं। लेकिन मुझे लगता है कि मेरा मॉड्यूल आरएफसी 2822 और संभवतः आरएफसी 5322 के अनुरूप है। एन्कोडिंग और डिकोडिंग के लिए कोर क्लासेस लाइनों को फोल्ड नहीं करते हैं, और केवल 'वाक्यांश' और' टेक्स्ट 'प्रोडक्शंस के साथ काम करते हैं। – nwellnhof

+0

मैं इसे और अधिक समय में देख लूंगा। आपको कहीं भी लाइन फोल्डिंग करना है, क्योंकि आरएफसी एक मजबूत सीमा लगाता है कि एक एन्कोडेड शब्द वाली रेखा कितनी देर तक हो सकती है। यदि आप गुना नहीं करते हैं, तो आप मनमाने ढंग से लंबे टेक्स्ट को एन्कोड नहीं कर सकते हैं। – Palec

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