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

时间:2011-10-03 14:26:34

标签: php ssl phpmailer

我是电子邮件服务器和使用PHP发送电子邮件的新手......

在将服务器上的PHP脚本发送到收件人的邮件服务器之前,是否可以使用SSL或TLS对我的服务器上的PHP脚本进行加密?

我需要确保只有预定的收件人才能阅读电子邮件,以防传输在其邮件服务器上被截获。

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

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

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

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

我正在运行Centos5.7,我认为它已经安装了邮件服务器,但我不确定PHP是否实际上默认使用它。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您无法保证将电子邮件发送到收件人的邮箱。 ONLY 表示您是邮件客户端和外发SMTP服务器之间的连接。在那之后,它完全不在您的手中。

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

答案 1 :(得分:2)

您正在寻找的加密类型不是SSL / TSL,它用于加密客户端(PHP)和将发送它的SMTP服务器之间的传输。 SSL / TLS不保证数据将一直加密到其端点。实际上,几乎可以肯定的是,在此过程中,数据在SMTP服务器和交换机之间进行中继。

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

要在mail()中实现此功能,您首先要加密邮件正文,然后将加密的ascii装甲块作为其第三个参数传递给mail()。邮件标题不会被加密,只会加密。

<强>附录

大多数银行和医疗服务(在美国,无论如何)处理安全邮件传输的方式都不是发送电子邮件。相反,必须保持安全的消息存储在用户与网站的“收件箱”中。用户必须登录(通过SSL)到网站才能阅读安全收件箱中的邮件。仅发送电子邮件以通知用户新消息正在等待。