使用代理 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 的解决方案,请按照以下步骤操作:
首先,您需要在服务器上安装socat
,您只需使用以下命令即可完成:
yum install socat
然后 运行 以下 socat
命令将 PROXY_IP:PORT
与 [= 绑定15=]:
socat TCP4-LISTEN:proxy_port,bind=proxy_IP,fork,su=nobody TCP4:host:port,bind=proxy_IP
那么你可以使用 [=14= 而不是通过 HOST_ESP:PORT
发送到 ESP ] 和 socat
将使用 PROXY_IP:PORT
[=43 的输出自动重定向到 HOST_ESP:PORT
=].
希望对您有所帮助。
我需要使用代理 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 的解决方案,请按照以下步骤操作:
首先,您需要在服务器上安装
socat
,您只需使用以下命令即可完成:yum install socat
然后 运行 以下
socat
命令将PROXY_IP:PORT
与 [= 绑定15=]:socat TCP4-LISTEN:proxy_port,bind=proxy_IP,fork,su=nobody TCP4:host:port,bind=proxy_IP
那么你可以使用 [=14= 而不是通过
HOST_ESP:PORT
发送到 ESP ] 和socat
将使用PROXY_IP:PORT
[=43 的输出自动重定向到HOST_ESP:PORT
=].
希望对您有所帮助。