メールの件名にアニメーションアイコン


103

私が知っているデータURIた複数base64の符号化データは、インライン画像などを用いることができます。今日、私は実際に件名にアニメーション(gif)アイコンが含まれているスパムメールを受信しました。

ここに画像の説明を入力してください

ここにアイコンだけがあります:

ここに画像の説明を入力してください

ですから、私の頭を越えた唯一のことは、データURIと、Gmailが何らかの種類の絵文字を件名に挿入することを許可したかどうかということだけでした。電子メールの完全な詳細バージョンを確認し、下の画像の件名行をポイントしました。

ここに画像の説明を入力してください

したがって、GIFは=?UTF-8?B?876Urg==?=データURIスキームに似たエンコードされた文字列から取得されますが、アイコンを取得できませんでした。要素のHTMLソースは次のとおりです。

ここに画像の説明を入力してください

長い話を短く、より絵文字がたくさんある16進数ですが。彼らはどこにも文書化されていないか、私はそれを見つけることができませんでした。それがデータURIに関するものである場合、Gmailのメールの件名にそれらをどのように含めることができますか?(私はそのメールをアイコンの代わりに表示してyahooメールアカウントに転送しました)、そうでない場合、そのエンコードされた文字列はどのように解析されますか?https://mail.google.com/mail/e/XXXXXX[?]


25
本当の質問は、どうやってそれらをブロックするのですか?
バンバム2015

@bambamsどういう意味ですか?
2015

13
それらは非常に迷惑であり、あなたが言ったように、それらはスパマーによってのみ使用されます。Gmailには表示されなかっただけです(既に99%がスパムとして検出されているようです)。
バンバム2015

1
それらをブロックする方法
次のとおりです

jamesmstoneのリンクは、メッセージをブロックする方法を示しています。絵文字自体をブロックしてメッセージを残したい場合は、Gmail件名の絵文字Roach Motelユーザースクリプトを使用してください。
Louis Semprini、

回答:


175

簡単な説明:

これらは内部ではと呼ばれgoomoji、非標準のUTF-8拡張であるように見えます。Gmailがこれらの文字のいずれかを検出すると、対応するアイコンに置き換えられます。ドキュメントは見つかりませんでしたが、フォーマットをリバースエンジニアリングすることができました。


これらのアイコンは何ですか?

これらのアイコンは、実際には[絵文字を挿入]パネルの下に表示されるアイコンです。

Gmail挿入絵文字

52Eリストにアイコンは表示されませんが、同じ規則に従っている他のアイコンがいくつかあります。

のように、名前が前に付いているアイコンもあります。これらのアイコンをこのように使用できるかどうか、またはどのように使用できるかを判断できませんでした。gtalk.03C gtalk.03C


このデータURIとは何ですか?

いくつかの類似点はありますが、実際にはデータURIではありません。これは実際には、RFC 2047で定義されいる、電子メールの件名の非ASCII文字をエンコードするための特別な構文です。基本的に、このように動作します。

=?charset?encoding?data?=

したがって、この例の文字列では、次のデータがあります。

=?UTF-8?B?876Urg==?=
  • charset = UTF-8
  • encoding= B(base64を意味します)
  • data = 876Urg==


それで、それはどのように機能しますか?

どういうわけか、876Urg==アイコンを意味します52Eが、どうやって?

base64でデコードすると876Urg==、取得され0xf3be94aeます。これはバイナリでは次のようになります。

11110011 10111110 10010100 10101110

これらのビットは、4バイトのUTF-8エンコード文字と一致しています。

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

したがって、関連するビットは次のとおりです。

     011   111110   010100   101110

または整列すると:

00001111 11100101 00101110

16進数では、これらのバイトは次のとおりです。

FE52E

ご覧のように、FEおそらくgoomojiアイコンを他のUTF-8文字と区別するためのプレフィックスを除いて52E、アイコンのURL と一致します。一部のテストでは、これが他のアイコンにも当てはまることが証明されています。


大変な作業のようですが、コンバータはありますか?:

もちろんこれはスクリプト化できます。テスト用に次のPythonコードを作成しました。これらの関数は、base64でエンコードされた文字列を、URLにある短い16進文字列との間で変換できます。このコードはPython 3用に書かれており、Python 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を見つけるには、Gmailで新しい下書きを作成し、必要なアイコンを挿入し、ブラウザーのDOMインスペクターを使用するだけです。

DOMインスペクター


14
それは驚くべき完全な答えです。言うことはありませんが、どうやってリバースエンジニアリングを行ったのでしょうか!アレクサンダーありがとう。
2015

2
B特別な構文でBase64が暗示されているというアサーションは推測である可能性があります(以前に見た場合、最後の文字列はBase64エンコードされた文字列のように見えます)。その後、4バイトがUnicode文字のUTF-8パターンの1つに従っていることに気づくことはそれほど難しくありません。特に、彼がUnicodeを探しているためです。それはかなりクールな探偵の仕事です、すべて同じです:)
同じ

3
@sameers推測する必要はありませんB-これは#4で定義されています

参考として、上記の回答でRFCに言及することをお勧めします。
15

@JeremyMiller関連するRFCを追跡していただきありがとうございます。この回答を書いているときに、それを見つけることができませんでした。
Alexander O'Mara

19

正しい16進コードポイント(たとえば、「poo of poo」のfe4f4)を使用し、件名のヘッダー内で正しくエンコードされている場合は、base64(@AlexanderOMaraを参照)またはquoted-printable(=?utf-8?Q?=F3=BE=93=B4?=)にすると、Gmailは自動的に解析して、対応する絵文字に置き換えます。

これは、件名行またはメール本文にコピーして貼り付けるためのGmailの絵文字リストです。受信トレイでさらに注目を集めるアニメーション絵文字は、黄色の背景に配置されます。

emailmarketingtipps.deのGmail絵文字


0

goomojiでタグ付けされたHTML画像に関するよく研究された回答を提供してくれたAlexander O'Maraに感謝します。

3つ追加したかっただけです。

  • スパマーやその他のマーケティング担当者が電子メールの件名に使用し始め、GmailがHTML画像に変換されない絵文字(および画像を生成する他のUnicodeシーケンス)はまだたくさんあります。一部のブラウザでは、これらは太字で色付きで表示されますが、アニメーションと同じくらい悪いです。ブラウザこれらをアニメーション化することを選択することもできますが、私がそうするかどうかはわかりません。これらのUnicodeシーケンスは、ブラウザーによってUnicodeテキストとして表示されるため、正確な外観(色の有無、アニメーションの有無など)は、ブラウザーが使用しているテキストレンダリングシステムによって異なります。特定のUnicode絵文字の外観は、Unicodeバリエーションセレクターと絵文字修飾子にも依存しますUnicodeコードポイントシーケンスでその近くに表示されます。画像ベースの絵文字スパムとは異なり、これらのシーケンスは、ブラウザーから他のアプリにコピーして、Unicodeテキストとして貼り付けることができます。

  • このStackOverflowの質問を読んでいる多くのマーケティング担当者がノーと言ってくれることを願っています。これらのシーケンスを電子メールの件名に含めることは恐ろしい考えであり、それはすぐにあなたとあなたのブランドを卑劣なスパマーとして傷つけます。それはあなたの電子メールが受け取る「注意」の価値はありません。

  • もちろん、皆さんの頭に浮かぶ最初の質問は、「どうすればこれらのものを取り除くのですか?」です。幸いなことに、このオープンソースのGreasemonkey / Tampermonkey / Violentmonkeyユーザースクリプトがあります。

Gmail件名件名絵文字ローチモーテル

このユーザースクリプトは、HTML画像(Alexander O'Maraのすばらしい仕事のおかげ)と純粋なUnicode型の両方を排除します。

後者のタイプの場合、ユーザースクリプトには、マーケティング担当者によって悪用される可能性が高いUnicodeシーケンスをキャプチャするように設計された正規表現が含まれています。正規表現は、ES6 Javascriptでは次のようになります(ユーザースクリプトは、これを驚くほどES6正規表現トランスパイラーを使用して広くサポートされているES6以前の正規表現に変換します)。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.