根据这
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时,我的应用程序现在正常工作了。
我在这方面非常新。有人能解释吗?如果重要的话,我正在使用php。
发布于 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握手。
https://stackoverflow.com/questions/37982619
复制相似问题