从PHP发送电子邮件时使用SSL/TLS


Using SSL/TLS when sending an email from PHP

我对电子邮件服务器和用PHP发送电子邮件非常陌生…

是否有可能从我的服务器上使用SSL或TLS加密的PHP脚本发送的电子邮件发送到收件人的邮件服务器之前?

我需要确保只有预期的收件人可以阅读电子邮件,以防在传输到他们的邮件服务器的过程中被拦截。

我不确定这是否可能,因为收件人的邮件服务器不知道公钥对吗?那么它是如何解密邮件的呢?

作为背景,我实际上并没有为任何人托管电子邮件帐户-所以这不是用户通过我的服务器进行身份验证并为他们下载电子邮件的情况。我只是有一个脚本触发警报电子邮件从"notifications@danbaylis.com"(这不是一个真正的电子邮件地址在服务器上,所以你不能回复它)发送到用户的真实电子邮件地址(我的应用程序知道)。我需要一种方法来确保这封电子邮件是安全地从我的服务器上的PHP发送到收件人的邮件服务器。

我已经研究了PHP中的mail()函数,以及PHPMailer类,但我不确定如何配置这些方法来安全发送电子邮件。

我所有的研究都显示了如何在我的服务器上安装SSL,这样用户就可以安全地下载存储在我服务器上的电子邮件-这不是我在这里要做的。

我正在运行Centos5.7,我相信它已经安装了一个邮件服务器,虽然我不确定PHP是否在默认情况下使用它。

谢谢你的帮助!

您不能保证电子邮件将被发送到收件人的邮箱。ONLY位置是您的邮件客户端和传出SMTP服务器之间的连接。在那之后,就完全不受你控制了。

如果你需要保证电子邮件的隐私,你必须加密电子邮件的正文。您需要的是S/MIME或PGP消息。这并不是说仍然会留下一些公开可用的信息——邮件正文将被加密,但寻址信息必须仍然是可读的——中间邮件服务器仍然需要知道如何传递邮件

您正在寻找的加密类型不是SSL/TSL, SSL/TSL用于加密客户端(PHP)和将发送它的SMTP服务器之间的传输。SSL/TLS不保证数据在到达端点的所有过程中都被加密。事实上,它几乎肯定不会,因为数据是在SMTP服务器和交换机之间传递的。

相反,您正在寻找PGP加密,这可以在PHP中使用GnuPG函数实现。必须使用收件人的公钥对邮件进行加密。然后只能用接收者的私钥解密和读取,而私钥仅由接收者持有。

要在mail()中实现这一点,您将首先加密消息体,然后将加密的ascii铠装块传递给mail()作为其第三个参数。消息头不加密,只加密消息体。

附录

大多数银行和医疗服务(至少在美国)处理安全信息传输的方式是根本不发送电子邮件。相反,必须保证安全的信息被存储在用户的"收件箱"中。用户必须(通过SSL)登录到网站才能阅读安全收件箱中的消息。发送电子邮件只是为了通知用户有新消息等待。