Например, у меня есть массив с этим ips и вы хотите создать с моим кодом длинную запись spf:
$array_ips = array(); $array_ips[] = "32.16.8.133"; $array_ips[] = "32.16.4.247"; $array_ips[] = "35.16.8.184"; $array_ips[] = "32.16.8.127"; $array_ips[] = "32.16.8.134"; $array_ips[] = "32.16.2.154"; $array_ips[] = "32.16.2.153"; $array_ips[] = "32.16.2.150"; $array_ips[] = "39.16.2.190"; $array_ips[] = "32.16.2.128"; $array_ips[] = "32.16.0.128"; $array_ips[] = "32.16.8.187"; $array_ips[] = "43.16.8.185"; $array_ips[] = "32.16.8.192"; $array_ips[] = "32.16.4.249"; $array_ips[] = "52.16.4.252"; $array_ips[] = "32.16.4.238"; $array_ips[] = "32.16.4.232"; $ips = implode(' ip4:', $array_ips); echo "v=spf1 +a +mx".$ips." -all";
Запись spf будет:
v=spf1 +a +mx ip4:32.16.8.133 ip4:32.16.4.247 ip4:32.16.8.184 ip4:32.16.8.127 ip4:32.16.8.134 ip4:32.16.2.154 ip4:32.16.2.153 ip4:32.16.2.150 ip4:32.16.2.190 ip4:32.16.2.128 ip4:32.16.0.128 ip4:32.16.8.187 ip4:32.16.8.185 ip4:32.16.8.192 ip4:32.16.4.249 ip4:32.16.4.252 ip4:32.16.4.238 ip4:32.16.4.232 -all
Персонажи: 307
Проблема в том, что SPF может быть максимальным. Длина 255 символов. Невозможно добавить такую длинную строку в plesk или cpanel в записи txt dns. Я слышал, что если можно было бы сделать это так: "v=spf1 .... first" "spf second string..."
.
Но действительно ли это работает? Как это сделать, создав его в моем примере выше?
Вы можете сделать что-то вроде ниже, если вы счастливы разрешить подсеть / 24 для нескольких IP-адресов. Вы можете даже подсеть правильно, если хотите. Так или иначе, вы сокращаете свой список.
<?php $array_ips = array(); $array_ips[] = "32.16.8.133"; $array_ips[] = "32.16.4.247"; $array_ips[] = "35.16.8.184"; $array_ips[] = "32.16.8.127"; $array_ips[] = "32.16.8.134"; $array_ips[] = "32.16.2.154"; $array_ips[] = "32.16.2.153"; $array_ips[] = "32.16.2.150"; $array_ips[] = "39.16.2.190"; $array_ips[] = "32.16.2.128"; $array_ips[] = "32.16.0.128"; $array_ips[] = "32.16.8.187"; $array_ips[] = "43.16.8.185"; $array_ips[] = "32.16.8.192"; $array_ips[] = "32.16.4.249"; $array_ips[] = "52.16.4.252"; $array_ips[] = "32.16.4.238"; $array_ips[] = "32.16.4.232"; $subnetArr = []; foreach ($array_ips as $k=>$v ) { $i = strrpos($v, '.'); $testSub = substr($v, 0, -(strlen($v) - $i)); if (in_array("ip4:" . $testSub . ".1/24", $subnetArr)) { //Do something here or change condition } else { array_push($subnetArr,"ip4:" . $testSub . ".1/24"); } } $ips = implode(' ', $subnetArr); echo "v=spf1 +a +mx ".$ips." -all";
Вывод
v=spf1 +a +mx ip4:32.16.8.1/24 ip4:32.16.4.1/24 ip4:35.16.8.1/24 ip4:32.16.2.1/24 ip4:39.16.2.1/24 ip4:32.16.0.1/24 ip4:43.16.8.1/24 ip4:52.16.4.1/24 -all
Редактировать:
Просто изменилось, так что это действительно SPF!
Вы можете разбить его на несколько включений.
"v=spf1 mx a include:iprange1.example.com include:iprange2.example.com -all"
Затем под каждым из них будет DNS.
iprange1.example.com = "v=spf1 ip4:32.16.8.133 ... -all" iprange2.example.com = "v=spf1 ip4:32.16.4.238 ... -all"
Это даст вам гораздо больше места, потому что вы сможете включить 8 включений вместе с вашими mx и
Затем каждый из них может содержать 16 ip4-адресов, которые будут иметь около 128 IP-адресов, которые не могут быть CIDR.
Изменить – iprange1 -> iprange2 в строке 2 второго фрагмента кода
Вам нужно будет сделать по подсчетам. Используйте стандартную нотацию сети IP4:
"v = spf1 ip4: 192.168.0.1/16 -all"
Разрешить любой IP-адрес между 192.168.0.1 и 192.168.255.255.
Я нашел решение:
echo "v=spf1 +a +mx ( "'.implode('" "',$array_ips).' " ) -all";
но на странице я нашел, что он не в энциклопедии. (пробелы требуются и ()
)
http://www.nullpointer.at/keyword/spf/
В переводе:
Запись TXT слишком длинная. Здесь, в этом примере, запись TXT была разделена на несколько строк. Синтаксис для этого: скобка (тогда в кавычках «первая часть» следующая строка в кавычках «вторая часть» и т. Д. И, наконец, скобки). Важно: не забудьте пробелы в каждом разделе, заключенном в кавычки: «первая часть» «вторая часть» затем состоит из «первой части второй части».