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

Sending emails from PHPMailer using proxies IP addresses

我需要使用代理 IP 地址从 PHPMailer 发送电子邮件,我知道要这样做,我需要使用 fsockopen 函数以便我可以连接到SMTP 帐户,我也知道如果我必须连接到代理,我必须再次使用 fsockopen 函数。但是在另一个 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 命令能否在这种情况下提供帮助,或者是否有任何解决方案或替代解决方案来实现这一目标?

这不是your earlier question的重复吗?我看不出有太大变化。

您没有正确使用代理(您不能在套接字中做套接字),但是 PHPMailer 没有任何特定的代理支持。如果要在任何地方,我会查看 SMTPOptions 中的设置属性,但据我所知 PHP 仅提供 proxy support in HTTP streams,因此您可能是 SOL。 运行 本地邮件服务器进行中继可能比代理更容易。

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

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

    yum install socat
    
  2. 然后 运行 以下 socat 命令将 PROXY_IP:PORT[= 绑定15=]:

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

希望对您有所帮助。