Как отфильтровать / удалить 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)
знак равно
Примечание: это потребует некоторой любви, если они начнут разрешать знаки плюса в доменах!