Pull to refresh

Как работает фильтрация e-mail адреса в gmail

Reading time 4 min
Views 9.9K

Основные принципы соответствия


Простым критерием проверки соответствия является Гугл поиск.
Вы должны вводить полные слова, т.к. не существует производных слов (например, joh не будет соответствовать john.smith@gmail.com). Тоже справедливо и для множественного числа (например, app не будет соответствовать apps@example.com).

Порядок слов не имеет значения, если они не заключены в кавычки (например, «smith john» не будет соответствовать john.smith@gmail.com). Как правило, символы игнорируются (см. ниже).

Слова разбиваются, кроме букв, цифр и символов подчеркивания. Самыми распространенными символами для разбивки слов являются +.@. Это означает, что foo не будет соответствовать foo_bar@example.com, но будет соответствовать foo+bar@example.com. Знак @ не считается за слово и может быть пропущен (например, «smith gmail» будет соответствовать john.smith@gmail.com).

Вы можете использовать оператор OR в дополнение к группировке() для некоторых сложных условий.

Поведение символов


Когда вы вводите символы в окне фильтра, то они как правило ведут себя по разному:
  • Символы, которые действуют как x y: ~#$%^*+;",<>? и знак ударения*. Например, smith~john становится smith john, который соответствует john.smith@gmail.com.
  • Символы, которые действуют как «x y»: -=\:'./. Например, john-smith становится «john smith», который соответствует john.smith@gmail.com.
  • Символы, которые трактуются буквально: &_. Например, john_smith будет соответствовать john_smith@gmail.com, но не john.smith@gmail.com.
  • Специальные символы: !@()[]{}|:
    • !: john!smith становится john -smith, что соответствует john.foo@gmail.com, но не john.smith@gmail.com;
    • @:
      • @ удаляется в конце слова. Например, john@ становится john, что соответствует john.smith@gmail.com;
      • @ удаляется в начале слова. Например, @ foo.com** станет foo.com, что соответствует john+foo.com@gmail.com;
      • @ используемый в середине слова, как правило требует полного адреса для успешного поиска. Например, john.smith@gmail не будет соответствовать john.smith@gmail.com. Кроме того, символы будут восприниматься буквально. Например, для поиска john.smith@gmail.com необходимо использовать john.smith@gmail.com, john-smith@gmail.com и john~smith@gmail.com не будут работать;
      • @ используемый в разных местах в середине слова, имеет странное поведение. Например, когда мы пытаемся найти john.smith@gmail.com, то при:
        • john@smith@gmail@com — не найдется;
        • gmail@com — не найдется;
        • @ gmail@com — не найдется**;
        • smith@gmail@comнайдется;
        • smith@gmail.com — не найдется;
        • «john smith@gmail.com» — не найдется;
        • «john.smith@gmail com» — не найдется;


    • | действует как оператор OR.
    • Скобки служат для группировки в операторах OR и AND.


Другие примеры поведения


Аккаунт, который вы используете по умолчанию (например, john.smith@gmail.com) будет соответствовать всем вариантам вашего адреса, если вы используете в нем точку, знак + или домен googlemail.com.

Вот краткое описание каждого способа:
  • Использование точки: Вы можете вводить сколько угодно точек в вашем адресе электронной почты. Например, если ваш адрес — john.smith@gmail.com, то почта, отправленная на j.o.h.n.s.mith@gmail.com придет на ваш адрес;
  • Использование знака +: После имени вашего аккаунта вы можете использовать знак "+" и любой текст. Например, почта, отправленная на адрес john.smith+foo@gmail.com придет на john.smith@gmail;
  • Использование домена googlemail.com: Любая почта, отправленная на адрес вашего аккаунта типа <your-gmail-account>@googlemail.com придет на ваш адрес с доменом @ gmail.com**. Например, почта, отправленная на john.smith@googlemail.com придет на john.smith@gmail.com.

Способы представления адреса можно комбинировать друг с другом, например, j.o.h.n.s.m.i.t.h+foo.bar@googlemail.com = john.smith@gmail.com.

Интересные последствия


1. Невозможно сравнить все ваши гугл адреса, в которых используется точка.
Если у вас вошло в привычку использовать точку в вашем адресе электронной почты для предотвращения спама (например, j.ohn.smith@gmail.com), то вы не сможете легко создать фильтр для всех версий вашего адреса с точкой, т.к. они разделяются в этом случае на отдельные слова (j ohn smith).
Когда у вас только один вариант с точкой, то фильтр (например, для спама) создать легко. Однако, если вы начинаете использовать разные варианты с точкой (например, jo.h.n.smi.th@gmail.com), то это станет причиной появления разных слов в адресе (например, jo h n smi th), что заставит вас создать различные условия для каждого варианта.

2. Символ + хуже чем оператор "" при сравнении адресов со знаком "+".
Если вы пытаетесь создать фильтр для адреса, в котором используется +, то лучше всего использовать полный адрес в фильтре (например, john.smith+foo@gmail.com).
Если, по какой-нибудь причине, вы не используете полный адрес, то следует иметь ввиду, что оператор + на самом деле хуже, чем оператор "". Например, использование john+foo хуже, чем «john foo», поскольку первый вариант будет соответствовать foo@john.com.
Имейте ввиду, что последний вариант не является панацеей, т.к. будет найден foo@john.foo.com. Он просто гарантирует правильный порядок слов. Для ясности, вы могли бы использовать «john+foo», но в действительности это тоже самое, что и «john foo».

3. Вы должны использовать отрицание, чтобы найти все адреса с "+", на которые была отправлена почта.
Чтобы отфильтровать все адреса, в которых используется + (например, чтобы отправить их в спам), вам следует использовать запрос вида john.smith@gmail.com -«john smith gmail com». Первая часть запроса найдет все адреса, в которых есть знак +. Вторая часть удалит все адреса, в которых нет слов в том же порядке. Например, john.smith+foo@gmail.com не будет найден, поскольку имеет слово foo между другими словами.
Обратите внимание, что есть один странный и маловероятный случай, когда это не будет работать: john.smith+john.smith.gmail.com@gmail.com, поскольку имеет слова в строго заданном порядке.

Примечания


* — имеется виду символ `, но к сожалению применения его нет у автора;
** — использовать без пробела, т.к. хабр форматирует в хабрапользователя.

Источник
Документация по теме

Tags:
Hubs:
+21
Comments 11
Comments Comments 11

Articles