Как отфильтровать / удалить Google Email ALIAS с помощью PHP?

Я могу создать неограниченный псевдоним электронной почты в Аккаунтах Google (Gmail), ссылка: http://www.gizmodo.com.au/2014/09/how-to-use-the-infinite-number-of-email-addresses-gmail-gives-you/

Но мне нужно отфильтровать адрес электронной почты, чтобы пользователь не использовал тот же самый оригинальный адрес электронной почты для регистрации в моем приложении.

Я хотел бы знать, есть ли что-нибудь, чтобы решить это? или мой уникальный вариант фильтрации с помощью регулярных выражений?

1 ответ

Решение

Я не согласен с комментарием, в котором прямо говорится, что вы не должны удалять "фильтры" (например, user_email+some_filter_to_flag_incoming_messages@ Example.org). "Ваши варианты использования не совпадают с моими вариантами использования" и т. Д. [0]

tl; dr: шаблон регулярного выражения, который вы ищете: '(\+.*)(?=\@)'

Объяснение:

Для начала напишите регулярное выражение, соответствующее буквальному знаку "+" и любому отдельному символу, любое количество раз:

'(\+.*)'

При замене этого шаблона на пустую строку, это превратит tristan+some_filter@example.org в tristan, Если вы решили разделить символ @, поздравляю, добавьте полученную строку в '@' + domain.TLD, и все готово. Я упоминаю об этом на случай, если вы уже разделили адрес электронной почты, и он все равно висит вокруг.

Если вы не разделяете адрес электронной почты пользователя по символу @, вам нужно использовать "положительный прогноз" (сопоставьте этот шаблон, если он выполняется с помощью указанной мной вещи), чтобы сообщить вашему совпадению, когда следует остановиться (поэтому мы не забирай слишком много)

'(\+.*)(?=\@)'

с этим на месте, мы получаем tristan@example.org, Ура, это не было так грубо.


[0]: В одном из моих приложений я сохраняю исходный адрес электронной почты, содержащий фильтр, который пользователи дают мне для связи, но отслеживаю использование фильтра и считаю каноническую учетную запись (внутреннюю ссылку) версией без фильтра (например, user_email@gmail.com). Я делаю это, чтобы облегчить поиск пользователей по электронной почте по адресу электронной почты.

Я понимаю, почему люди используют псевдонимы / фильтры:

  • они создают иллюзию, что их можно использовать для отслеживания спамеров (как если бы харвестер электронной почты не удалил фильтр перед продажей списка)
  • они полезны для маршрутизации электронной почты или запуска событий (например, отправка текста, когда вы получаете электронное письмо от me+package_delivery@domain.tld)
  • "Боже мой, я могу это сделать?" фактор

Это все, что говорит: "Я понимаю, люди любят фильтры", но есть веские причины, как автора приложения или компании, чтобы отметить их.

Я написал функцию в php которые я использую для этого и сейчас:

function unalias_gmail($email) {
    return preg_replace('/(\+[^\@]+)/', '', $email);
}

Это вернет адрес электронной почты без псевдонима, если он есть, или указанный адрес электронной почты, если псевдонима нет. У меня есть dataProvider для phpunit, чтобы вы могли видеть мои тесты:

<?php

require_once __DIR__ . '/path/to/helper.php';
use PHPUnit\Framework\TestCase;

class HelperTest extends TestCase
{
    public function data_test_unalias_gmail(): array
    {
        return array(
            // Provided email vs the expected result
            array('foo@gmail.com', 'foo@gmail.com'),
            array('foo_bar@gmail.com', 'foo_bar@gmail.com'),
            array('foo-bar@gmail.com', 'foo-bar@gmail.com'),
            array('foo+bar@gmail.com', 'foo@gmail.com'),
        );
    }

    /**
     * @dataProvider data_test_unalias_gmail
     */
    public function test_unalias_gmail($email, $expected): void
    {
        $actual = unalias_gmail($email);
        $this->assertEquals($expected, $actual);
    }
}

Дарит мне счастье OK (4 tests, 4 assertions) знак равно

Примечание: это потребует некоторой любви, если они начнут разрешать знаки плюса в доменах!

Другие вопросы по тегам