Установить исходный IP в PHPmailer

Я хотел повернуть исходные 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-адреса мои, мне просто нужно убедиться, что они меняются при каждом отправленном электронном письме, и я мог это сделать, но сейчас я не уверен, что изменить, чтобы он снова заработал.

Спасибо за вашу помощь

1

Решение

Проверка SPF производится не через объявление «все хорошо» по почте, а через записи DNS. Посмотрите на SPF Checker, как https://mxtoolbox.com/spf.aspx чтобы увидеть, указаны ли все пять ваших IP-адресов в записи SPF для вашего исходящего домена.

1

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

Это скорее сетевой вопрос, а не PHP. Удаленный хост, такой как Gmail, будет видеть исходящий общедоступный IP-адрес только с вашего почтового сервера. Если вы подключаетесь к одному из исходных случайных IP-адресов, но исходящий трафик маршрутизируется так, что трафик исходит от основного IP-адреса сервера, то это все, что увидит Gmail. Вам нужно изучить сетевую конфигурацию, чтобы увидеть, были ли какие-либо недавние изменения в этом отношении.

РЕДАКТИРОВАТЬ: Я добавлю, что мой ответ — немного расплывчато, но это потому, что мы не знаем, каковы ваши настройки сети. Вы, вероятно, должны задать этот вопрос на ServerFault:
https://serverfault.com/

1

Привязка к IP происходит при создании сокета. Вы можете контролировать это, устанавливая параметры, которые передаются stream_context_create() в PHPMailer SMTP учебный класс:

$mail->SMTPOptions = [
'socket' => [
'bindto' => "$bound_ip:0",
],
];

куда $bound_ip буквальный адрес IPv4 / IPv6, результат gethostbyname('your-domain.example')и т. д. Использование 0 для порта позволяет системе выбрать порт нормально. Увидеть bindto документы для получения дополнительной информации.

0
По вопросам рекламы [email protected]