在PHPmailer中设置原始IP

时间:2018-01-17 23:06:15

标签: php email phpmailer whm exim

我想在电子邮件脚本中轮换原始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地址都是我的,我只需要确保它们在每封发送的电子邮件上轮换,我可以这样做但是现在我不知道要改变什么来让它再次起作用

感谢您的帮助

4 个答案:

答案 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地址