Как настроить phpmailer для отправки почты с прокси?

#php #email #proxy #smtp #phpmailer

#php #Адрес электронной почты #прокси #smtp #phpmailer

Вопрос:

Как я могу использовать прокси-серверы для отправки smtp-почты с помощью PHPMailer? Формат прокси: прокси / порт / пользователь / пароль Я использую следующий код для отправки электронной почты:

 <?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
use PHPMailerPHPMailerException;

require 'C:/xampp/php/pear/PHPMailer-master/src/PHPMailer.php';
require 'C:/xampp/php/pear/PHPMailer-master/src/SMTP.php';

$mail = new PHPMailer(true);

$mail->SMTPDebug = 3;                               
$mail->isSMTP();                                    
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;                              
$mail->Username = "test@gmail.com";                 
$mail->Password = "password";                           
$mail->SMTPSecure = "tls";                           
$mail->Port = 587;                                   

$mail->From = "test@gmail.com";
$mail->FromName = "Name";

$mail->addAddress("address@yahoo.com", "name");

$mail->isHTML(true);

$mail->Subject = "Mail Subject";
$mail->Body = "Something";
$mail->AltBody = "This is the plain text version of the email content";

try {
    $mail->send();
    echo "Message has been sent successfully";
} catch (Exception $e) {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

?>
  

Я пытался с socat, но безуспешно, поскольку socat не может быть установлен на моем сервере, я также пытался с curl, но безуспешно.

Я также знаю, что phpmailer не имеет явной поддержки SMTP-прокси.

Также подскажите, есть ли замена PHPMailer, которая может использовать прокси, на случай, если прокси не могут быть настроены для PHPMailer.

Ответ №1:

Я подозреваю, что это тот же вопрос, который недавно задавался на GitHub.

Короткий ответ заключается в том, что вы не можете. Не потому, что PHPMailer не поддерживает его, а потому, что проксирование SMTP на самом деле не существует в каком-либо практическом смысле из-за его отключенного, асинхронного характера сохранения и пересылки. В этом отношении он совершенно не похож на HTTP. У вас есть две альтернативы:

  1. Используйте прокси TCP. Вы указываете IP-адрес прокси-хоста в качестве своего почтового сервера, и он перенаправляет трафик. Это полностью прозрачно для PHPMailer и поэтому не требует какой-либо конкретной поддержки, но вы, вероятно, столкнетесь с проблемами TLS.

  2. Используйте SMTP-ретранслятор. Отправляйте на «ближайший» почтовый сервер (обычно называемый «smarthost»), который затем занимается дальнейшей доставкой для вас. Вероятно, это то, что вы хотите. Опять же, PHPMailer не заботится о ваших механизмах ретрансляции здесь, поскольку вы просто отправляете на smarthost, как обычно, поэтому никакой специальной поддержки не требуется.

Причина, по которой «SMTP-прокси» на самом деле не может работать, заключается в том, что нет гарантии, что SMTP-сервер сможет осуществлять дальнейшую доставку. Для доставки сообщения может потребоваться буквально несколько дней ожидания и повторных попыток, а это означает, что прокси-серверу необходимо реализовать все, что делает SMTP-сервер, превратив его в SMTP-ретранслятор.

Существуют прокси-серверы SMTP, но они обычно используются только в средах с высокой доступностью, например, в интерфейсных балансировщиках нагрузки SMTP, где, по сути, гарантируется немедленная дальнейшая доставка, поэтому прокси-серверу не требуется локальное хранилище или возможности постановки в очередь. Вероятно, это не то, что вы ищете.

Если вы хотите большего, вам нужно точно указать, чего вы пытаетесь достичь, почему и как.