Я хотел повернуть исходные IP-адреса в сценарии электронной почты, он используется для отправки уведомлений моим клиентам.
Мой сервер поставляется с 5 IP-адресами, поэтому я создал массив IP-адресов, и при отправке IP-адрес менялся случайным образом, в этот массив я не включаю IP-адрес основного сервера.
Это работало нормально до декабря прошлого года, я не вносил никаких изменений и не обновлял (не уверен, было ли какое-либо автоматическое)
Вот сценарий:
$iparray = array(
'163.xx.217.xx',
'164.xx.217.xx',
);
$ips = $iparray;
$keyip = array_rand($ips);$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "none";
$mail->Host = $ips[$keyip];
$mail->Port = 26;
$mail->AddAddress($recipient);
$mail->Username=$senderemail;
$mail->Password=$senderpass;
$mail->SetFrom($senderemail,$sendername);
$mail->AddReplyTo($senderemail,$sendername);
$mail->AddBCC('[email protected]');
$mail->Subject = 'the subject';
$mail->MsgHTML('the message);
Обратите внимание, что $ mail-> Host — это IP-адрес, выбранный случайным образом из массива, при проверке полученного сообщения я получал следующее:
spf=pass (google.com: domain of [email protected] designates 163.xx.217.xx as permitted sender) [email protected]
Однако с декабря проверка SPF выполняется на главном IP-адресе сервера, а не на любом из выбранных IP-адресов в массиве, который я не хочу.
Это работало должным образом, но внезапно все изменилось, это могли быть серверы Gmail? Может ли что-то быть настроено на сервере?
Для отправки электронных писем я использую Exim, установленный на сервере Centos, управляемый через WHM.
Я не пытаюсь подделать какой-либо адрес, все IP-адреса мои, мне просто нужно убедиться, что они меняются при каждом отправленном электронном письме, и я мог это сделать, но сейчас я не уверен, что изменить, чтобы он снова заработал.
Спасибо за вашу помощь
Проверка SPF производится не через объявление «все хорошо» по почте, а через записи DNS. Посмотрите на SPF Checker, как https://mxtoolbox.com/spf.aspx чтобы увидеть, указаны ли все пять ваших IP-адресов в записи SPF для вашего исходящего домена.
Это скорее сетевой вопрос, а не PHP. Удаленный хост, такой как Gmail, будет видеть исходящий общедоступный IP-адрес только с вашего почтового сервера. Если вы подключаетесь к одному из исходных случайных IP-адресов, но исходящий трафик маршрутизируется так, что трафик исходит от основного IP-адреса сервера, то это все, что увидит Gmail. Вам нужно изучить сетевую конфигурацию, чтобы увидеть, были ли какие-либо недавние изменения в этом отношении.
РЕДАКТИРОВАТЬ: Я добавлю, что мой ответ — немного расплывчато, но это потому, что мы не знаем, каковы ваши настройки сети. Вы, вероятно, должны задать этот вопрос на ServerFault:
https://serverfault.com/
Привязка к IP происходит при создании сокета. Вы можете контролировать это, устанавливая параметры, которые передаются stream_context_create()
в PHPMailer SMTP
учебный класс:
$mail->SMTPOptions = [
'socket' => [
'bindto' => "$bound_ip:0",
],
];
куда $bound_ip
буквальный адрес IPv4 / IPv6, результат gethostbyname('your-domain.example')
и т. д. Использование 0
для порта позволяет системе выбрать порт нормально. Увидеть bindto
документы для получения дополнительной информации.