#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. У вас есть две альтернативы:
-
Используйте прокси TCP. Вы указываете IP-адрес прокси-хоста в качестве своего почтового сервера, и он перенаправляет трафик. Это полностью прозрачно для PHPMailer и поэтому не требует какой-либо конкретной поддержки, но вы, вероятно, столкнетесь с проблемами TLS.
-
Используйте SMTP-ретранслятор. Отправляйте на «ближайший» почтовый сервер (обычно называемый «smarthost»), который затем занимается дальнейшей доставкой для вас. Вероятно, это то, что вы хотите. Опять же, PHPMailer не заботится о ваших механизмах ретрансляции здесь, поскольку вы просто отправляете на smarthost, как обычно, поэтому никакой специальной поддержки не требуется.
Причина, по которой «SMTP-прокси» на самом деле не может работать, заключается в том, что нет гарантии, что SMTP-сервер сможет осуществлять дальнейшую доставку. Для доставки сообщения может потребоваться буквально несколько дней ожидания и повторных попыток, а это означает, что прокси-серверу необходимо реализовать все, что делает SMTP-сервер, превратив его в SMTP-ретранслятор.
Существуют прокси-серверы SMTP, но они обычно используются только в средах с высокой доступностью, например, в интерфейсных балансировщиках нагрузки SMTP, где, по сути, гарантируется немедленная дальнейшая доставка, поэтому прокси-серверу не требуется локальное хранилище или возможности постановки в очередь. Вероятно, это не то, что вы ищете.
Если вы хотите большего, вам нужно точно указать, чего вы пытаетесь достичь, почему и как.