首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >smtp.gmail.com对ssl://smtp.gmail.com使用gmail服务器发送电子邮件

smtp.gmail.com对ssl://smtp.gmail.com使用gmail服务器发送电子邮件
EN

Stack Overflow用户
提问于 2016-06-23 04:53:43
回答 1查看 12.5K关注 0票数 3

根据

Gmail SMTP Server也可用于从设备或应用程序中继邮件。可以使用SMTP、SSL/TLS连接到Gmail邮件服务器。如果使用SMTP进行连接,则只能向Gmail或Google应用程序用户发送邮件;如果使用SSL/TLS进行连接,则可以向任何人发送邮件。 如果您的设备或应用程序支持SSL -在端口465上连接到smtp.gmail.com。

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

无法使用PHP发送电子邮件。您的服务器可能不会被配置为使用此方法发送邮件。

一些代码使用另一个地址"ssl://smtp.gmail.com“。

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

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

我在这方面非常新。有人能解释吗?如果重要的话,我正在使用php。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 05:31:56

ssl://作为主机名的前缀与不使用它之间的区别在于,底层流是通过OpenSSL进行包好,还是以纯文本形式发言。

当您连接到端口465上的Gmail时,它希望客户端使用TLS加密。最有可能的是,您看到的错误消息是连接到期望加密连接的服务的一般结果,而该服务只是试图以纯文本写入和读取数据。

当您使用ssl://包装器连接到支持TLS或SSL的服务时,PHP会给您带来神奇的效果。它允许您以与未加密连接相同的方式(使用fread/fwrite)在流上进行读写,并且所有握手、加密和解密都是在后台完成的,只需在主机上加上ssl包装的前缀即可。

至于第二个问题,很可能与安全有关。为了中继(将邮件发送到另一个域),您需要通过SMTP进行身份验证,当您可以使用未加密的连接在25端口上连接时,这种身份验证不应以明文完成,并且无需身份验证就将邮件发送给Gmail用户(这是大多数外部邮件服务器在向Gmail发送邮件的用户之一时所做的事情)。但在技术上,没有什么可以阻止您使用未加密的连接发送邮件,甚至可以使用Gmail凭据进行身份验证(这称为开放中继,通常被垃圾邮件者严重滥用)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37982619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档