php - 使用gmail smtp服务器发送电子邮件时smtp.gmail.com vs ssl ://smtp. gmail.com

标签 php email ssl smtp gmail

根据 this

Gmail SMTP Server could also be used to relay messages from your device or application. You can connect to Gmail mail servers using SMTP, SSL/TLS. If you connect using SMTP, you can only send mail to Gmail or Google Apps users; if you connect using SSL/TLS, you can send mail to anyone.

If your device or application supports SSL - connect to smtp.gmail.com on port 465.

所以我尝试在端口 465 上连接到 smtp.gmail.com。我收到以下错误:

Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.

一些 code使用另一个地址“ssl://smtp.gmail.com”。

当我也在端口 465 上使用 ssl://smtp.gmail.com 时,我的应用程序现在可以正常工作。

  • 如果后者也使用 ssl,那么 ssl://smtp.gmail.com 和 smtp.gmail.com 之间有什么区别?
  • 为什么我们不能在没有 SSL 的情况下向其他域发送电子邮件?出于安全目的,这是否仅由 gmail 完成?

我对此非常陌生。谁能解释一下?如果重要的话,我正在使用 php。

最佳答案

在主机名前加 ssl:// 和不加前缀的区别在于底层流是否为 wrapped。通过 OpenSSL,或以纯文本说话。

当您连接到端口 465 上的 Gmail 时,它希望客户端使用 TLS 加密。您看到的错误消息很可能是连接到服务时的一般结果,该服务在尝试以纯文本格式写入和读取数据时需要加密连接。

当您使用 ssl:// 包装器连接到支持 TLS 或 SSL 的服务时,PHP 会为您施展魔法。它允许您以与未加密连接相同的方式在流上读取和写入(例如使用 fread/fwrite),并且所有握手、加密和解密都在后台完成,只需为主机添加前缀使用 ssl 包装器。

至于第二个问题,很可能与安全有关。为了中继(将邮件发送到另一个域),您需要通过 SMTP 进行身份验证,这永远不能以明文形式完成,而您可以使用未加密的连接连接到端口 25 并在不进行身份验证的情况下将邮件发送给 Gmail 用户(这是最外面的邮件服务器会在其用户之一向 Gmail 发送邮件时执行此操作)。但从技术上讲,没有什么可以阻止他们允许您使用未加密的连接发送邮件,甚至可以使用 Gmail 凭据进行身份验证(这称为开放中继,通常被垃圾邮件发送者严重滥用)。

您可以通过阅读有关 SMTP 协议(protocol)、STARTTLS 命令和一般 TLS 加密的内容来了解​​有关第一个问题的更多信息。 STARTTLS 允许客户端通过未加密的连接连接到邮件服务器,然后协商(升级)连接以使用加密,另一方面,到端口 465 的连接期望 TLS 握手发生一旦建立连接,在任何协议(protocol) (SMTP) 通信发生之前。

关于php - 使用gmail smtp服务器发送电子邮件时smtp.gmail.com vs ssl ://smtp. gmail.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982619/

相关文章:

php - 如何通过 SQL 在 PHP 中创建动态表

php - 验证输入是否是链接

php - 如何从代码运行 phpunit?

php - 使用 php 发送 IMAP 命令

.net - 使用 https 端点添加 WCF 服务引用

php - Mysql查询执行计划有缓存吗?

php - 如何解码电子邮件中的主题?

php - 我怎样才能确保我不会从 php 测试站点向客户发送任何电子邮件

Git 错误 : OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

ssl - 为 MarkLogic 集群使用 SSL 主机名