我需要使用代理IP地址發送來自PHPMailer的電子郵件,我知道這樣做需要使用fsockopen函數,因此我可以連接到SMTP帳戶,知道如果我必須連接到代理服務器,我必須再次使用fsockopen函數。但在另一個fsockopen中使用它fsockopen是行不通的。使用代理服務器從PHPMailer發送電子郵件IP地址
我有透明代理,不需要驗證。我需要將它發送到外部電子郵件服務提供商的遠程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
命令可以幫助在這種情況下,或有任何解決方案或替代解決方案來實現?
感謝@Synchro爲您的快速重播,不確定如何在這種情況下使用SOL請添加示例如果可以。 (檢查我的更新)。 –
恩,我不認爲你知道[SOL是什麼意思](http://onlineslangdictionary.com/meaning-definition-of/sol)...對不起! – Synchro
當你有一個代理時,你不會直接與最終服務器通話(就像你正在做的那樣)。您連接到代理並向其發送命令*就好像您正在與真實服務器通話一樣。代理將命令轉發給目標服務器,並將響應中繼給您。在支持代理服務器的系統中,您通常會建立與代理服務器的連接,並將您真正想要連接的目標傳遞給您正在談論的任何協議的附加包裝。 PHP沒有SMTP代理支持,只有HTTP,所以你需要推出你自己的代理代碼,或者找到一個代理庫。 – Synchro