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

Zak*_*rki 8 php email proxy phpmailer fsockopen

我需要使用代理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);

?>
Run Code Online (Sandbox Code Playgroud)

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

可以socat命令可以帮助在这种情况下,还是有任何解决方案或替代解决方案,以实现这一目标?

Zak*_*rki 4

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

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

    yum install socat
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后运行以下socat命令来PROXY_IP:PORT绑定HOST_ESP:PORT

    socat TCP4-LISTEN:proxy_port,bind=proxy_IP,fork,su=nobody TCP4:host:port,bind=proxy_IP
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后,HOST_ESP:PORT您可以使用 并将其PROXY_IP:PORT自动重定向到使用 的socat输出,而不是通过它发送到 ESP 。HOST_ESP:PORTPROXY_IP:PORT

希望这可以帮助。

  • @zakaria 你刚刚拯救了我的一天,我非常感谢你。顺便说一句,如果有人对语法感到困惑,很简单:这里的 **代理** 是您的服务器(相同或任何其他),它将充当您的应用程序和 SMTP 服务器之间的代理/媒介。`proxy_IP` = 您的服务器的主机名或 IP。`proxy_port` = 服务器中的任何可用端口,这将成为应用程序中要连接的 SMTP 端口。`host:port` = 这是您想要发送电子邮件的实际 SMTP 主机和端口格式。在要创建代理的服务器中运行此命令。 (2认同)