PHP 通过具有互联网连接的代理服务器在没有互联网连接的情况下发送电子邮件



我有PHP应用程序在没有互联网的情况下运行。我想使用此应用程序通过具有有效互联网连接的本地代理服务器发送电子邮件。

这是一个非常广泛的问题,比这里更适合服务器故障。SMTP 的存储转发架构意味着代理电子邮件并不是特别容易,在大多数情况下,它保留用于在高可用性情况下跨入站服务器集群进行负载平衡,而不是出站,后者的可靠性要低得多。

您通常的做法是使用中继而不是代理。您发送到中继,然后中继继续发送到互联网。在代理服务器上安装邮件服务器,并将其配置为本地服务器邮件服务器的中继。有许多关于如何执行此操作的指南,例如本指南。几乎所有此类指南都假设您是通过某些需要身份验证的外部服务(如gmail(发送的,因此您会看到许多对sasl和该行的引用,但是,由于它位于本地网络上,因此您可以将其IP列入白名单,以便无需身份验证即可中继。在后缀中,这是根据文档配置的。

完成此操作后,通过使用服务器中的命令行邮件客户端向自己发送消息来对其进行测试:

echo "test" | mail -s "Relay test" -a "From: you@example.com" recipient@example.com

您可以通过读取每个邮件的日志文件来跟踪该邮件从本地服务器、中继传递到您自己的邮件服务器的传递。

一旦你知道你的基础设施正在工作,你可以通过两种方式从PHPMailer使用它:直接与中继服务器对话:

$mail->isSMTP();
$mail->Host = '10.0.0.2'; //Your relay's internal IP
$mail->SMTPAuth = false; //Don't need authentication if whitelisted
//Prevent PHPMailer trying to use encryption; it won't work with a literal IP
$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = false;

或者使用服务器的本地邮件服务器为您进行中继:

$mail->isSMTP();

(默认属性将起作用,因此您需要做的就是启用 SMTP(。

最新更新