使用代理 IP 地址从 PHPMailer 发送电子邮件


Sending emails from PHPMailer using proxies IP addresses

我需要使用代理IP地址从PHPMailer发送电子邮件,我知道要这样做,我需要使用fsockopen函数,以便我可以连接到SMTP帐户,我也知道如果我必须连接到代理,我必须再次使用fsockopen函数。但是在另一个fsockopen中使用它是不可行的。

我有透明的代理,不需要身份验证。我需要将其发送到外部电子邮件服务提供商的远程SMTP服务器。

我尝试过的代码:

<?php
    //SMTP params
    $server      = 'smtp.espdomain.com';
    $server_port = '25';
    $username = 'smtp_login';
    $password = 'smtp_pass';
    //Proxy
    $proxy      = '1.1.1.1';
    $proxy_port = 1111;
    //Open connection
    $socket = fsockopen($proxy, $proxy_port);
    //Send command to proxy
    fputs($socket, "CONNECT $server:$server_port HTTP/1.0'r'nHost: $proxy'r'n'r'n");
    fgets($socket, 334);
    //SMTP authorization  
    fputs($socket, "AUTH LOGIN'r'n");
    fgets($socket, 334);
    fputs($socket, base64_encode($username)."'r'n");
    fgets($socket, 334);
    fputs($socket, base64_encode($password)."'r'n");
    $output = fgets($socket, 235);
    fputs($socket, "HELO $server 'r'n"); 
    $output = fgets($socket, 515);
?>

而且它不起作用,我不知道为什么?

在这种情况下,socat命令是否有帮助,或者是否有任何解决方案或替代解决方案来实现这一点?

我终于找到了使用 socat 的解决方案,请按照以下步骤操作:

  1. 首先,您需要在服务器上安装socat,只需使用以下命令即可:

    yum install socat
    
  2. 然后运行以下socat命令,将PROXY_IP:PORTHOST_ESP:PORT 绑定:

    socat TCP4-LISTEN:proxy_port,bind=proxy_IP,fork,su=nobody TCP4:host:port,bind=proxy_IP
    
  3. 然后,您可以使用PROXY_IP:PORT而不是通过HOST_ESP:PORT发送到 ESP,socat将使用 PROXY_IP:PORT 的输出自动重定向到 HOST_ESP:PORT

希望这有帮助。

这不是你之前问题的重复吗?我看不出有什么变化。

您没有正确使用代理(您无法在套接字内执行套接字),但是 PHPMailer 没有任何特定的代理支持。如果它将在任何地方,我会考虑在SMTPOptions中设置属性,尽管据我所知,PHP 仅在 HTTP 流中提供代理支持,因此您可能是 SOL。运行本地邮件服务器进行中继而不是代理可能更容易。