Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php smtp.gmail.com vsssl://smtp.gmail.com 使用gmail smtp服务器发送电子邮件时_Php_Email_Ssl_Smtp_Gmail - Fatal编程技术网

Php smtp.gmail.com vsssl://smtp.gmail.com 使用gmail smtp服务器发送电子邮件时

Php smtp.gmail.com vsssl://smtp.gmail.com 使用gmail smtp服务器发送电子邮件时,php,email,ssl,smtp,gmail,Php,Email,Ssl,Smtp,Gmail,据 Gmail SMTP服务器也可用于中继来自您的电子邮件 设备或应用程序。您可以使用连接到Gmail邮件服务器 SMTP、SSL/TLS。如果使用SMTP连接,则只能向发送邮件 Gmail或谷歌应用程序用户;如果使用SSL/TLS进行连接,则可以发送 给任何人发邮件 如果您的设备或应用程序支持SSL-连接到smtp.gmail.com 在465端口 所以我尝试在端口465上连接到smtp.gmail.com。我得到了以下错误: 无法使用PHP SMTP发送电子邮件。您的服务器可能不可用 配置为

Gmail SMTP服务器也可用于中继来自您的电子邮件 设备或应用程序。您可以使用连接到Gmail邮件服务器 SMTP、SSL/TLS。如果使用SMTP连接,则只能向发送邮件 Gmail或谷歌应用程序用户;如果使用SSL/TLS进行连接,则可以发送 给任何人发邮件

如果您的设备或应用程序支持SSL-连接到smtp.gmail.com 在465端口

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

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

有些人使用另一个地址“ssl://smtp.gmail.com“

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

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

我对这一点非常陌生。有人能解释一下吗?如果有必要的话,我会使用php。

在主机名前面加上
ssl://
前缀与不加前缀的区别在于底层流是否将通过OpenSSL传输,或者是以纯文本形式传输

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

当您使用
ssl://
包装器连接到支持TLS或ssl的服务时,PHP为您带来了魔力。它允许您以与未加密连接相同的方式在流上读写(使用fread/fwrite),所有握手、加密和解密都在后台完成,只需在主机上添加ssl包装器即可

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

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