Как мне создать длинный действительный адрес электронной почты?

Что я имею в виду:

$ php -r 'var_dump(filter_var(str_repeat("a", 64) . "@gmail.com", FILTER_VALIDATE_EMAIL));'
Command line code:1:
string(74) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@gmail.com"$ php -r 'var_dump(filter_var(str_repeat("a", 65) . "@gmail.com", FILTER_VALIDATE_EMAIL));'
Command line code:1:
bool(false)

Есть ли ограничение по длине имени почтового ящика? Мне нужно письмо длиной более 255 символов (для тестирования).

UPD Позвольте мне объяснить, для чего мне это нужно. В своих тестах я хотел бы убедиться, что пользователь не может указать адрес электронной почты длиной более 255 символов. Вот почему мне нужен длинный адрес электронной почты.

UPD После предложения Юстинас:

$ php -r 'var_dump(filter_var(str_repeat("a", 64) . "@" . str_repeat("g", 63) . ".com", FILTER_VALIDATE_EMAIL));'
Command line code:1:
string(132) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg.com"$ php -r 'var_dump(filter_var(str_repeat("a", 64) . "@" . str_repeat("g", 64) . ".com", FILTER_VALIDATE_EMAIL));'
Command line code:1:
bool(false)

1

Решение

Источник

Формат адресов электронной почты — local-part @ domain, где локальная часть может быть длиной до 64 символов и домен может иметь максимум 255 символов


Для генерации длинной строки вы можете использовать что-то простое str_repeat

var_dump(str_repeat('a', 64).'@'.str_repeat('g', 255).'.com');
1

Другие решения

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

     <?php

function generateEmailAddress($maxLenLocal=64, $maxLenDomain=255){
$numeric        =  '0123456789';
$alphabetic     = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$extras         = '.-_';
$all            = $numeric . $alphabetic . $extras;
$alphaNumeric   = $alphabetic . $numeric;
$alphaNumericP  = $alphabetic . $numeric . "-";
$randomString   = '';

// GENERATE 1ST 4 CHARACTERS OF THE LOCAL-PART
for ($i = 0; $i < 4; $i++) {
$randomString .= $alphabetic[rand(0, strlen($alphabetic) - 1)];
}
// GENERATE A NUMBER BETWEEN 20 & 60
$rndNum         = rand(20, $maxLenLocal-4);

for ($i = 0; $i < $rndNum; $i++) {
$randomString .= $all[rand(0, strlen($all) - 1)];
}

// ADD AN @ SYMBOL...
$randomString .= "@";

// GENERATE DOMAIN NAME - INITIAL 3 CHARS:
for ($i = 0; $i < 3; $i++) {
$randomString .= $alphabetic[rand(0, strlen($alphabetic) - 1)];
}

// GENERATE A NUMBER BETWEEN 15 & $maxLenDomain-7
$rndNum2        = rand(15, $maxLenDomain-7);
for ($i = 0; $i < $rndNum2; $i++) {
$randomString .= $all[rand(0, strlen($all) - 1)];
}
// ADD AN DOT . SYMBOL...
$randomString .= ".";

// GENERATE TLD: 4
for ($i = 0; $i < 4; $i++) {
$randomString .= $alphaNumeric[rand(0, strlen($alphaNumeric) - 1)];
}

return $randomString;

}var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
var_dump(generateEmailAddress());
0

Процитировать еще немного из ссылка Юстина предоставила:

Формат адресов электронной почты — local-part @ domain, где местная часть может быть длиной до 64 символов а также домен может иметь максимум 255 символов— но максимальная длина 256-символьных ограничений прямого или обратного пути весь адрес электронной почты быть не более 254 символов.

Теперь, если мы посмотрим на filter_var«s источник, мы увидим, что там в основном две проверки:

  1. если весь адрес электронной почты длиннее 320 символов
  2. если это соответствует регулярное выражение (если мы не укажем FILTER_FLAG_EMAIL_UNICODE флаг)

Регулярное выражение может быть переписано следующим образом:

/^
### check if total length is no more than 254 symbols
(?!
(?:
(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)
|
(?:\\x22?[^\\x5C\\x22]\\x22?)
){255,}
)
### check if the part before @ is no more than 64 symbols
(?!
(?:
(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)
|
(?:\\x22?[^\\x5C\\x22]\\x22?)
){65,}
@
)
(?:
(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)
|
(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)
)
(?:
\\.
(?:
(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)
|
(?:
\\x22
(?:
[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]
|
(?:\\x5C[\\x00-\\x7F])
)*
\\x22
)
)
)*
@
(?:
(?:
### no segment must be longer than 64 symbols
(?!.*[^.]{64,})
(?:
(?:
(?:xn--)?
[a-z0-9]+
(?:-+[a-z0-9]+)*
\\.
){1,126}
){1,}
(?:
(?:[a-z][a-z0-9]*)
|
(?:(?:xn--)[a-z0-9]+)
)
(?:-+[a-z0-9]+)*
)
|
### ip
(?:
\\[
(?:
(?:
IPv6:
(?:
(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})
|
(?:
(?!(?:.*[a-f0-9][:\\]]){7,})
(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?
::
(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?
)
)
)
|
(?:
(?:
IPv6:
(?:
(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)
|
(?:
(?!(?:.*[a-f0-9]:){5,})
(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?
::
(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?
)
)
)?
(?:
(?:25[0-5])
|
(?:2[0-4][0-9])
|
(?:1[0-9]{2})
|
(?:[1-9]?[0-9])
)
(?:
\\.
(?:
(?:25[0-5])
|
(?:2[0-4][0-9])
|
(?:1[0-9]{2})
|
(?:[1-9]?[0-9])
)
){3}
)
)
\\]
)
)
$/iD

Зная, что лучшее, что мы можем получить, это:

$ php -r 'var_dump(filter_var(str_repeat("a", 64) . "@" . str_repeat(str_repeat("g", 63) . ".", 2) . str_repeat("g", 61), FILTER_VALIDATE_EMAIL));'
Command line code:1:
string(254) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg.ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg.ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg"$ php -r 'var_dump(filter_var(str_repeat("a", 64) . "@" . str_repeat(str_repeat("g", 63) . ".", 2) . str_repeat("g", 62), FILTER_VALIDATE_EMAIL));'
Command line code:1:
bool(false)
0
По вопросам рекламы [email protected]