ईमेल विषय में एनिमेटेड आइकन


103

मैं डेटा यूआरआई के बारे में जानता हूं जिसमें base64एन्कोडेड डेटा को इनलाइन जैसे कि इमेज में इस्तेमाल किया जा सकता है। आज मुझे एक ईमेल प्राप्त हुआ जो वास्तव में एक स्पैम था जिसमें उसके विषय में एक एनिमेटेड (gif) आइकन था:

यहां छवि विवरण दर्ज करें

यहाँ केवल आइकन है:

यहां छवि विवरण दर्ज करें

तो केवल एक ही चीज़ मेरे दिमाग को पार कर गई थी, सभी डेटा यूआरआई के बारे में और अगर जीमेल विषय में किसी प्रकार के इमोटिकॉन्स डालने की अनुमति देता है। मैंने ईमेल का पूरा विस्तृत संस्करण देखा और नीचे चित्र पर विषय पंक्ति की ओर इशारा किया:

यहां छवि विवरण दर्ज करें

तो जीआईएफ =?UTF-8?B?876Urg==?=एन्कोडेड स्ट्रिंग से आता है जो डेटा यूआरआई योजना के समान है, हालांकि मैं आइकन को इससे बाहर नहीं निकाल सका। यहाँ तत्व HTML स्रोत है:

यहां छवि विवरण दर्ज करें

लंबी कहानी छोटी है, https://mail.google.com/mail/e/XXXजहां XXXहेक्साडेसिमल संख्या से बहुत सारे इमोटिकॉन्स हैं। वे कहीं भी प्रलेखित हैं या मुझे नहीं मिला। यदि वह डेटा यूआरआई के बारे में है, तो उन्हें जीमेल के ईमेल विषय में शामिल करना कैसे संभव है? (मैंने उस ईमेल को एक याहू ईमेल खाते में भेज दिया, [?]जो आइकन के बजाय देख रहा है ) और अगर यह नहीं है, तो उस एन्कोडेड स्ट्रिंग को कैसे पार्स किया जाता है?


25
असली सवाल यह है कि आप उन्हें कैसे रोकते हैं ?!
बंबाम्स

@bambams तुम्हारा क्या मतलब है?
रेवो

13
वे अविश्वसनीय रूप से परेशान हैं और जैसा कि आपने कहा कि वे केवल स्पैमर द्वारा उपयोग किए जाते हैं। मुझे लगता है कि वे सिर्फ जीमेल द्वारा नहीं दिखाए गए थे (यह पहले से ही स्पैम के रूप में 99% का पता लगाने लगता है)।
बंबाम्स

1
यहाँ उन्हें ब्लॉक करने का तरीका बताया गया है
jamesmstone

jamesmstone का लिंक संदेशों को ब्लॉक करने का तरीका दिखाता है; अगर आप खुद इमोजी को ब्लॉक करना चाहते हैं और संदेश छोड़ना चाहते हैं, तो जीमेल सब्जेक्ट लाइन इमोजी रोच मोटल यूजरस्क्रिप्ट का उपयोग करें।
लुइस सेमीप्रिनि

जवाबों:


175

संक्षिप्त वर्णन:

उन्हें आंतरिक रूप से संदर्भित किया जाता है goomoji, और वे एक गैर-मानक UTF-8 एक्सटेंशन प्रतीत होते हैं। जब जीमेल इनमें से किसी एक अक्षर का सामना करता है, तो इसे संबंधित आइकन से बदल दिया जाता है। मैं उन पर कोई दस्तावेज नहीं ढूंढ पा रहा था, लेकिन मैं प्रारूप को रिवर्स करने में सक्षम था।


ये चिह्न क्या हैं?

वे चिह्न वास्तव में प्रतीक हैं जो "इंसर्ट इमोटिकॉन्स" पैनल के तहत दिखाई देते हैं।

Gmail डालें इमोटिकॉन्स

जबकि मैं 52Eसूची में आइकन नहीं देख रहा हूं , कई अन्य हैं जो समान सम्मेलन का पालन करते हैं।

ध्यान दें कि कुछ आइकन भी हैं जिनके नाम उपसर्ग हैं, जैसे कि । मैं यह निर्धारित करने में सक्षम नहीं था कि इन आइकनों का इस तरीके से उपयोग किया जा सकता है या नहीं।gtalk.03C gtalk.03C


क्या है ये डेटा URI?

यह वास्तव में एक डेटा यूआरआई नहीं है , हालांकि यह कुछ समानताएं साझा करता है। यह वास्तव में RFC 2047 में परिभाषित ईमेल विषयों में गैर-ASCII वर्णों को एन्कोडिंग करने के लिए एक विशेष वाक्यविन्यास है । असल में, यह इस तरह काम करता है।

=?charset?encoding?data?=

तो, हमारे उदाहरण स्ट्रिंग में, हमारे पास निम्न डेटा है।

=?UTF-8?B?876Urg==?=
  • charset = UTF-8
  • encoding= B(बेस 64 का अर्थ है)
  • data = 876Urg==


तो यह कैसे काम करता है?

हम जानते हैं कि किसी भी तरह, 876Urg==आइकन का मतलब है 52E, लेकिन कैसे?

यदि हम बेस 64 डिकोड करते हैं 876Urg==, तो हम प्राप्त करते हैं 0xf3be94ae। यह बाइनरी में निम्नलिखित की तरह दिखता है:

11110011 10111110 10010100 10101110

ये बिट्स 4-बाइट UTF-8 एन्कोडेड वर्ण के अनुरूप हैं।

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

तो प्रासंगिक बिट्स निम्नलिखित हैं:

     011   111110   010100   101110

या जब संरेखित करें:

00001111 11100101 00101110

हेक्साडेसिमल में, ये बाइट्स निम्नलिखित हैं:

FE52E

जैसा कि आप देख सकते हैं, FEउपसर्ग को छोड़कर जो कि संभवतः goomojiUTF-8 वर्णों से आइकन को अलग करने के लिए है , यह 52Eआइकन URL में मेल खाता है । कुछ परीक्षण साबित करते हैं कि यह अन्य आइकन के लिए सही है।


बहुत काम की तरह लगता है, क्या कोई कन्वर्टर है? ”

यह निश्चित रूप से स्क्रिप्टेड हो सकता है। मैंने अपने परीक्षण के लिए निम्नलिखित पायथन कोड बनाया। ये फ़ंक्शंस बेस 64 एनकोडेड स्ट्रिंग को यूआरएल में पाए जाने वाले शॉर्ट हेक्स स्ट्रिंग से और उससे बदल सकते हैं। ध्यान दें, यह कोड पायथन 3 के लिए लिखा गया है, और पायथन 2 संगत नहीं है।

रूपांतरण कार्य:

import base64

def goomoji_decode(code):
    #Base64 decode.
    binary = base64.b64decode(code)
    #UTF-8 decode.
    decoded = binary.decode('utf8')
    #Get the UTF-8 value.
    value = ord(decoded)
    #Hex encode, trim the 'FE' prefix, and uppercase.
    return format(value, 'x')[2:].upper()

def goomoji_encode(code):
    #Add the 'FE' prefix and decode.
    value = int('FE' + code, 16)
    #Convert to UTF-8 character.
    encoded = chr(value)
    #Encode UTF-8 to binary.
    binary = bytearray(encoded, 'utf8')
    #Base64 encode return end return a UTF-8 string. 
    return base64.b64encode(binary).decode('utf-8')

उदाहरण:

print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))

आउटपुट:

52E
876Urg==

और, ज़ाहिर है, एक आइकन के URL को खोजने के लिए बस जीमेल में एक नया ड्राफ्ट तैयार करना होता है, जो आइकन आप चाहते हैं, और अपने ब्राउज़र के DOM इंस्पेक्टर का उपयोग कर सकते हैं।

डोम इंस्पेक्टर


14
यह एक अद्भुत पूर्ण उत्तर है। मेरे पास कहने को कुछ नहीं है लेकिन मुझे आश्चर्य है कि आपने उस पर उल्टा इंजीनियरिंग कैसे किया !! शुक्रिया सिकंदर।
रेवो

2
दावा है कि Bविशेष सिंटेक्स में निकलता है Base64 एक अनुमान (दिखता है की तरह अंत में स्ट्रिंग की तरह एक Base64, स्ट्रिंग इनकोडिंग यदि आप पहले उन देखा है) हो सकता है; जिसके बाद यह नोटिस करना कठिन नहीं है कि यूनिकोड वर्णों के लिए चार बाइट्स यूटीएफ -8 पैटर्न में से एक का अनुसरण करते हैं, क्योंकि वह यूनिकोड की तलाश में है। यह बहुत अच्छा जासूसी काम, सभी एक ही :)
sameers

3
@sameers के बारे में अनुमान लगाने की आवश्यकता नहीं है B- यह # 4 में परिभाषित किया गया है

संदर्भ के रूप में, उपरोक्त उत्तर में RFC का उल्लेख करना अच्छा होगा।
sameers

@ JeremyMiller संबंधित RFC को ट्रैक करने के लिए धन्यवाद! जब मैं यह उत्तर लिख रहा था तब मैं इसका पता नहीं लगा सका था।
अलेक्जेंडर ओ'मैरा

19

यदि आप सही हेक्स कोड बिंदु (उदाहरण के लिए 'poo के ढेर' के लिए fe4f4 ) का उपयोग करते हैं और यदि यह सही ढंग से विषय पंक्ति हेडर के भीतर एन्कोडेड है, तो इसे बेस 64 (@AlexanderOMara देखें) या उद्धृत-प्रिंट करने योग्य ( =?utf-8?Q?=F3=BE=93=B4?=) देखें, तो जीमेल स्वचालित रूप से होगा। पार्स करें और इसे संबंधित इमोजी के साथ बदलें।

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

जीमेल एमोजिस पर ईमेलमार्केटिंगटिप्प्सडे


0

Goomoji- टैग की गई HTML छवियों के बारे में इस तरह के शोधपूर्ण उत्तर के लिए अलेक्जेंडर ओ'मैरा को बहुत-बहुत धन्यवाद !

मैं सिर्फ तीन चीजें जोड़ना चाहता था:

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

  • मुझे उम्मीद है कि इस StackOverflow सवाल को पढ़ने वाले कई विपणक सिर्फ नहीं कहेंगे। इन दृश्यों को अपनी ईमेल विषय रेखाओं में शामिल करना एक भयानक विचार है और यह आपको और आपके ब्रांड को निम्न जीवन शैली के स्पैमर के रूप में कलंकित करेगा। यह "ध्यान" के लायक नहीं है जो आपका ईमेल प्राप्त करेगा।

  • बेशक हर किसी के दिमाग में आने वाला पहला सवाल है: "मैं इन चीजों से कैसे छुटकारा पाऊं?" सौभाग्य से इस खुले स्रोत Greasemonkey / Tampermonkey / Violentmonkey के उपयोगकर्ता नाम है:

जीमेल सब्जेक्ट लाइन इमोजी रोच मोटल

यह उपयोगकर्ता नाम HTML- छवि ( अलेक्जेंडर ओ'मैरा के भयानक काम के लिए धन्यवाद ) और शुद्ध-यूनिकोड दोनों प्रकार को समाप्त करता है ।

उत्तरार्द्ध प्रकार के लिए, उपयोगकर्ता नाम में एक नियमित अभिव्यक्ति शामिल है जिसे यूनिकोड अनुक्रमों को मार्केटर्स द्वारा दुरुपयोग करने की संभावना को पकड़ने के लिए डिज़ाइन किया गया है। ईएस 6 जावास्क्रिप्ट में रेगेक्स इस तरह दिखता है (यूजरस्क्रिप्ट इसे व्यापक रूप से समर्थित प्री- ईएस 6 रेगेक्स का अद्भुत ईएस 6 रेगेक्स ट्रांसपिलर का उपयोग करके अनुवाद करता है ):

var re = /(\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F|[\u{2100}-\u{2BFF}\u{E000}-\u{F8FF}\u{1D000}-\u{1F5FF}\u{1F650}-\u{1FA6F}\u{F0000}-\u{FFFFF}\u{100000}-\u{10FFFF}])\s*/gu

// which includes the Unicode Emoji pattern from
//   https://github.com/tc39/proposal-regexp-unicode-property-escapes
// plus also these blocks frequently used for spammy emojis
// (see https://en.wikipedia.org/wiki/Unicode_block ):
//   U+2100..U+2BFF     Arrows, Dingbats, Box Drawing, ...
//   U+E000..U+F8FF     Private Use Area (gmail generates them for some emoji)
//   U+1D000..U+1F5FF   Musical Symbols, Playing Cards (sigh), Pictographs, ...
//   U+1F650..U+1FA6F   Ornamental Dingbats, Transport and Map symbols, ...
//   U+F0000..U+FFFFF   Supplementary Private Use Area-A
//   U+100000..U+10FFFF Supplementary Private Use Area-B
// plus any space AFTER the discovered emoji spam
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.