我想在电子邮件脚本中轮换原始IP地址,它用于向我的客户发送通知。
我的服务器附带了5个IP地址,所以我创建了一个IP数组,当发送IP地址随机更改时,在这个数组中我没有包含主服务器IP。
直到去年12月,这个工作正常,我没有做任何更改或更新(我不确定是否有任何自动)
这是脚本:
$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('smtp@xxxxx.co');
$mail->Subject = 'the subject';
$mail->MsgHTML('the message);
请注意,$ mail-> Host是从数组中随机选择的IP,在检查收到的消息时,我曾经得到过:
spf=pass (google.com: domain of test@xxxxxxx.co designates 163.xx.217.xx as permitted sender) smtp.mailfrom=test@xxxxxxx.co
但是,自12月以来,SPF检查是在服务器主IP上进行的,而不是阵列中任何选定的IP,这是我不想要的。
这项工作正常但突然之间发生了变化,可能是Gmail服务器吗?它可以在服务器中配置吗?
为了发送电子邮件,我使用安装在Centos服务器上的Exim,通过WHM管理。
我不是要欺骗任何地址,所有IP地址都是我的,我只需要确保它们在每封发送的电子邮件上轮换,我可以这样做但是现在我不知道要改变什么来让它再次起作用
感谢您的帮助
答案 0 :(得分:1)
SPF检查不是通过在邮件中声明“一切正常”而是通过DNS记录进行的。查看一下SPF检查程序,例如https://mxtoolbox.com/spf.aspx,查看您的所有五个IP地址是否都列在您的外发域的SPF记录中。
答案 1 :(得分:1)
这更像是一个网络问题,而不是PHP。像Gmail这样的远程主机只会从您的邮件服务器中看到传出的公共IP。如果您连接到其中一个原始随机IP,但正在路由传出流量,以便流量来自服务器的主IP,那么Gmail将会看到所有这些。您需要查看您的网络配置,以确定在这方面是否有任何最近的更改。
编辑:我补充一点,我的答案 - 有些模糊,但那是因为我们不知道您的网络设置是什么样的。您应该在ServerFault上提出这个问题: https://serverfault.com/答案 2 :(得分:0)
创建套接字时,会绑定到IP。您可以通过在PHPMailer的stream_context_create()
类中设置传递给SMTP
的选项来控制此操作:
$mail->SMTPOptions = [
'socket' => [
'bindto' => "$bound_ip:0",
],
];
其中$bound_ip
是文字的IPv4 / IPv6地址,是gethostbyname('your-domain.example')
的结果,等等。对端口使用0
可使系统正常选择端口。有关更多信息,请参见bindto
docs。
答案 3 :(得分:0)
该解决方案不是直接在PhpMailer中使用,而是因为我在Exim中使用MTA,答案是将exim设置为从etc / mailips中读取IP,甚至可以将单个域映射到您的任何服务器IP地址