Например, у меня есть массив с этим 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 была разбита на несколько строк. Синтаксис для этого: скобка (затем в кавычках «первая часть», следующая строка в кавычках «вторая часть» и т. Д. И, наконец, скобки). Важно: не забывайте пробелы в каждом разделе, заключенные в кавычки: «первая часть», «вторая часть» затем составляется в «первую часть вторую часть».