【问题标题】:PHP send email without internet connection via proxy server which have internet connectionPHP 通过具有 Internet 连接的代理服务器在没有 Internet 连接的情况下发送电子邮件
【发布时间】:2019-09-11 06:31:55
【问题描述】:

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

【问题讨论】:

  • 在系统级别,这取决于您的网络设置 - 代理可以用作任何更广泛网络流量的默认网关。因此,如果您可以ping 电子邮件服务器 - 您可以只引用电子邮件服务器,网络将选择适当的根目录来访问它。

标签: php email phpmailer proxy-server


【解决方案1】:

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

您通常会采用的方式是使用中继而不是代理。您发送到中继,然后中继继续发送到互联网。在代理服务器上安装邮件服务器,并将其配置为本地服务器邮件服务器的中继。有很多关于如何做到这一点的指南,例如this one。几乎所有此类指南都假定您是通过需要身份验证的 gmail 等外部服务发送的,因此您会看到很多对 sasl 和线路的引用,但是,由于它在您的本地网络上,您可以改为将其 IP 列入白名单,这样您就可以中继无需身份验证。在 postfix 中,这是按照 the docs 配置的。

完成后,通过使用服务器上的命令行邮件客户端向自己发送消息来测试它:

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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多