【问题标题】:Set origin IP in PHPmailer在 PHPmailer 中设置源 IP
【发布时间】:2018-01-17 23:06:14
【问题描述】:

我想在电子邮件脚本中轮换原始 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 服务器吗?会不会是要在服务器中配置的东西?

为了发送电子邮件,我使用 Exim,安装在 Centos 服务器上,通过 WHM 管理。

我没有试图欺骗任何地址,所有 IP 地址都是我的,我只需要确保它们在发送的每封电子邮件上轮换,我可以做到,但现在我不确定要更改什么才能让它再次工作.

感谢大家的帮助

【问题讨论】:

    标签: php email phpmailer whm exim


    【解决方案1】:

    在创建套接字时绑定到 IP。您可以通过在 PHPMailer 的 SMTP 类中设置传递给 stream_context_create() 的选项来控制它:

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

    其中$bound_ip是文字IPv4/IPv6地址,gethostbyname('your-domain.example')等的结果。使用0作为端口可以让系统正常选择端口。请参阅bindto docs 了解更多信息。

    【讨论】:

      【解决方案2】:

      SPF 检查不是通过在邮件中声明“一切正常”进行的,而是通过 DNS 记录进行的。查看像 https://mxtoolbox.com/spf.aspx 这样的 SPF 检查器,看看您的所有五个 IP 地址是否都列在您的传出域的 SPF 记录中。

      【讨论】:

      • 提问者的意思是 SPF 记录包含额外的 IP,这就是他们想要将它们用于传出 SMTP 连接的原因。
      【解决方案3】:

      这更像是一个网络问题,而不是 PHP。像 Gmail 这样的远程主机只会看到来自您的邮件服务器的传出公共 IP。如果您连接到原始随机 IP 之一,但正在路由传出流量,以便流量源自服务器的主 IP,那么这就是 Gmail 将看到的全部内容。您需要查看您的网络配置,看看最近在这方面是否有任何变化。

      编辑:我要补充一点,我的回答有点含糊,但那是因为我们不知道您的网络设置是什么样的。您可能应该在 ServerFault 上问这个问题: https://serverfault.com/

      【讨论】:

      • 问题表明提问者在谈论公共 IP,并且知道它们是 Google 服务器看到的。 PHP 已经能够为传出连接指定 IP 地址绑定很长时间了。
      【解决方案4】:

      解决方案不是直接在 te PhpMailer 中,但由于我使用 Exim 作为 MTA,答案是设置 exim 以从 etc/mailips 读取 IP,您甚至可以将单个域映射到您的任何服务器 IP 地址

      【讨论】:

        猜你喜欢
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 2018-04-18
        相关资源
        最近更新 更多